如何在根节点上查找子节点[TreeView]

时间:2010-09-22 09:04:15

标签: c# asp.net webforms treeview

 ROOT
      A 
        B
          C 
            D 
              E
        T
      F
      G
        X

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

3 个答案:

答案 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.";
  }

}