2012-06-27 28 views
1

在我的ASP.NET應用程序中,啓用了複選框的情況下使用了Treeview控件。在那個treeview中,如果我選中了treenode想在特定的checked節點中顯示不同的顏色。見下面如何更改asp.net(c#)中的顏色。如果treenode檢查

foreach (treenode node in treeview.nodes) 
{ 
    if (node.checked == true) 
    { 
     "change the color of the node" 
    } 
} 

我用來檢查下面的節點編碼。但沒有標籤檢查節點

protected void TreeView1_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e) 
    {   

     if (e.Node.ChildNodes.Count > 0) 
     { 
      CheckAllChildNodes(e.Node, e.Node.Checked); 
     } 

     if (e.Node.ChildNodes.Count == 0) 
     { 
      CheckAllParentNodes(e.Node); 
     } 
    } 

    private void CheckAllChildNodes(System.Web.UI.WebControls.TreeNode treeNode, bool nodeChecked) 
    { 
     foreach (System.Web.UI.WebControls.TreeNode node in treeNode.ChildNodes) 
     { 
      node.Checked = nodeChecked; 

      if (node.ChildNodes.Count > 0) 
      { 
       this.CheckAllChildNodes(node, nodeChecked); 
      } 
     } 
    } 
    private void CheckAllParentNodes(System.Web.UI.WebControls.TreeNode treeNode) 
    { 
     if (treeNode.Parent != null) 
     { 
      if (treeNode.Checked == false) 
      { 
       treeNode.Parent.Checked = false; 
       CheckAllParentNodes(treeNode.Parent); 
      } 
     } 
    } 

請幫我解決這件事情的顏色變化..

回答

2

如果我明白你的問題背後,顯然是有點棘手,你必須做以下步驟

1)集你的樹形視圖的每個節點的文字就像這樣

<asp:TreeNode Text='<font color="Red"> Test Inner 1</font>' Value="1"></asp:TreeNode> 

2)使用的代碼下面的代碼背後

protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e) 
{ 
    if(Session["lastNode"] != null) 
    { 
     TreeNode lastNode = Session["lastNode"] as TreeNode; 

     TreeNode tn = TreeView1.FindNode(Server.HtmlEncode(lastNode.ValuePath)); 
     tn.Text = tn.Text.Replace(@"color=""Red""", @"color=""Blue"""); 

    } 

    Session["lastNode"] = TreeView1.SelectedNode; 
} 
+0

此代碼將更改上次選定節點的顏色,請問您在找什麼? – MSUH

+0

它將在單個節點上工作。但假設我檢查了父節點想要更改該子節點的顏色也。這一個是解決另一個問題。感謝您的支持 – soundy

+1

您始終可以遍歷父級的子節點,並使用相同的邏輯來更改子節點的顏色。如果「lastnode」是父節點,它必須有lastnode.ChildNodes> 0 – MSUH

6

設置SelectedNode的背景色屬性可以使它自動。

treeview.SelectedNodeStyle.BackColor = System.Drawing.Color.Silver; 

編輯

沒有爲在asp.net TreeView的單個節點沒有前景色屬性。要改變前景顏色,你必須擴展TreeNode,並在你定製的TreeNode類中應用樣式。您必須在TreeView Nodes集合中使用此自定義TreeNode,而不是使用默認TreeNode類。詳細瞭解這些文章article 1,article 2會幫助你。

在HTML

<asp:TreeView ID="TreeView1" runat="server"> 
    <Nodes> 
     <My:CustomTreeNode Text="Node A" 
          Value="Node A"> 
      <My:CustomTreeNode Text="Node B" 
           Value="Node B"> 
      </My:CustomTreeNode> 
     </My:CustomTreeNode> 
    </Nodes> 
</asp:TreeView> 

代碼

public class CustomTreeNode : TreeNode 
{ 
    protected override void RenderPreText(HtmlTextWriter writer) 
    { 
     writer.AddStyleAttribute(HtmlTextWriterStyle.Color, "green"); 
    } 
} 
+0

它並不適用於所有檢查的節點工作。它只適用於選定的節點。我想改變樹視圖中所有選中節點的顏色。 – soundy

+0

如何檢查樹視圖的節點?你可以使用這個treenode.BackColor = System.Drawing.Color.Silver;來改變你製作複選框的節點的顏色。 – Adil

+0

更新了我的答案,請檢查它是否有幫助。 – Adil