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"
我做错了什么?
您需要移动
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);