ROOT
A
B
C
D
E
T
F
G
X
我想找到E Node的父节点(它是5号)。然后,我将保存节点。如果number更小5.我在Asp.net控件中使用TreeView。
答案 0 :(得分:7)
我建议使用递归迭代。
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
是您追求的价值。
答案 1 :(得分:1)
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;
}
答案 2 :(得分:1)
我很好奇,因为它被标记为WebForm,为什么不建议使用Microsoft的FindNode方法。它从v2.0到现在兼容(目前为v4.5.2)。
这不起作用吗?
来自Microsoft的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.";
}
}