如何在asp.net(c#)中更改颜色。如果treenode检查

时间:2012-06-27 04:50:40

标签: c# asp.net treeview

在我的ASP.NET应用程序中,使用了Treeview控件并启用了复选框。在那个树视图中,如果我检查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 个答案:

答案 0 :(得分:6)

设置SelectedNode的BackColor属性可以使其自动。

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

修改

asp.net TreeView中的单个节点没有ForeColor属性。要更改前面的颜色,您必须扩展TreeNode并在自定义的TreeNode类中应用样式。您必须在TreeView节点集合中使用此自定义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");
    }
}

答案 1 :(得分: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;
}