2012-06-27 29 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