c#asp.net树视图-除TEXT外,所有属性都有效

本文关键字:属性 有效 TEXT net 视图 c#asp | 更新日期: 2023-09-27 18:19:58

当我的页面打开时,它运行以下方法:

    private void PrintRecursive(TreeNode treeNode, string problemValue)
    {
        // Print the node.
        System.Diagnostics.Debug.WriteLine(treeNode.Text);
        if (treeNode.Value == problemValue.Split(':')[0])
        {
            treeNode.Checked = true;
            // Then expand the SelectedNode and ALL its parents until no parent found
            treeNode.Expand();
            while (treeNode.Parent != null)
            {
                treeNode = treeNode.Parent;
                treeNode.Expand();
            }
            if (problemValue.Contains(":"))
                treeNode.Text += problemValue.Split(':')[1];
            return;
        }
        // Print each node recursively.
        foreach (TreeNode tn in treeNode.ChildNodes)
        {
            PrintRecursive(tn, problemValue);
        }
    }

treeNode.Checked = true运行良好!

treeNode.Expand()工作很棒!

然而treeNode.Text += problemValue.Split(':')[1];什么也不做!

problemValue的值为"111:someproblem"

我做错了什么?

c#asp.net树视图-除TEXT外,所有属性都有效

您需要移动

        if (problemValue.Contains(":"))
            treeNode.Text += problemValue.Split(':')[1];

在while语句之上。

问题是,当您扩展父节点时,您正在更新treeNode的值,因此当您尝试设置treeNode的文本时,您实际上位于父节点之一。

如果您想了解如何做到这一点,请查看之前的StackOverFlow帖子,以及有关如何枚举实现IEnumerable 的树节点的其他想法

如果你想打印树节点递归地看这个例子

private void PrintRecursive(TreeNode treeNode)
{
   // Print the node.
   System.Diagnostics.Debug.WriteLine(treeNode.Text);
   MessageBox.Show(treeNode.Text);
   // Print each node recursively.
   foreach (TreeNode tn in treeNode.Nodes)
   {
      PrintRecursive(tn);
   }
}
// Call the procedure using the TreeView.
private void CallRecursive(TreeView treeView)
{
   // Print each node recursively.
   TreeNodeCollection nodes = treeView.Nodes;
   foreach (TreeNode n in nodes)
   {
      PrintRecursive(n);
   }
}

如果你想在IEmumable中做到这一点,请尝试以下

public static class Extensions
{
    public static IEnumerable<T> GetRecursively<T>(this IEnumerable collection,
        Func<T, IEnumerable> selector)
    {
        foreach (var item in collection.OfType<T>())
        {
            yield return item;
            IEnumerable<T> children = selector(item).GetRecursively(selector);
            foreach (var child in children)
            {
                yield return child;
            }
        }
    }
}

以下是如何使用的示例

TreeView view = new TreeView();
// ...
IEnumerable<TreeNode> nodes = view.Nodes.
    .GetRecursively<TreeNode>(item => item.Nodes);