1

在我的 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);
            }
        }
    }

请帮我解决这个问题..

4

2 回答 2

6

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

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

编辑

asp.net TreeView 中的单个节点没有 ForeColor 属性。要更改前景色,您必须扩展 TreeNode 并在自定义的 TreeNode 类中应用样式。您将不得不在 TreeView 节点集合中使用这个自定义的 TreeNode,而不是使用默认的 TreeNode 类。详细了解这些文章第 1条、第 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");
    }
}
于 2012-06-27T04:54:32.173 回答
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;
}
于 2012-06-27T06:10:03.090 回答