如何在根节点上查找子节点

ROOT AB CDE T F G X 

我想找到E Node的父节点(它是5号)。 然后,我将保存节点。 如果number更小5.我在Asp.net控件中使用TreeView。

我建议使用递归迭代。

 private TreeNode FindNode(TreeView tvSelection, string matchText) { foreach (TreeNode node in tvSelection.Nodes) { if (node.Tag.ToString() == matchText) { return node; } else { TreeNode nodeChild = FindChildNode (node, matchText); if (nodeChild != null) return nodeChild; } } return (TreeNode)null; } 

您可以利用此逻辑来确定有关您的节点的许多内容,此结构还允许您扩展您可以对节点和要搜索的条件执行的操作。 您可以编辑我的示例以满足您自己的需求。

因此,使用此示例,您可以传入E并期望返回节点E,然后只是返回的节点的父属性将是您之后的父节点。

 tn treenode = FindNode(myTreeview, "E") 

tn.parent是您tn.parent的价值。

  private TreeNode GetNode(string key) { TreeNode n = null ; n = GetNode(key, Tree.Nodes); return n; } private TreeNode GetNode(string key,TreeNodeCollection nodes) { TreeNode n = null; if (nodes.ContainsKey(key)) n = nodes[key]; else { foreach (TreeNode tn in nodes) { n = GetNode(key, tn.Nodes); if (n != null) break; } } return n; } 

我很好奇,因为它被标记为WebForm,为什么不建议使用Microsoft的FindNode方法。 它从v2.0到现在兼容(目前为v4.5.2)。

这不起作用吗?

来自微软的MSDN:

使用FindNode方法从TreeView控件获取指定值路径中的节点。 值路径包含以分隔符分隔的节点值列表,这些节点值形成从根节点到当前节点的路径。 每个节点都将其值路径存储在ValuePath属性中。 PathSeparator属性指定用于分隔节点值的分隔符。

例:

 void Button_Click(Object sender, EventArgs e) { // Find the node specified by the user. TreeNode node = LinksTreeView.FindNode(Server.HtmlEncode(ValuePathText.Text)); if (node != null) { // Indicate that the node was found. Message.Text = "The specified node (" + node.ValuePath + ") was found."; } else { // Indicate that the node is not in the TreeView control. Message.Text = "The specified node (" + ValuePathText.Text + ") is not in this TreeView control."; } }