【问题标题】:how to find child nodes at root node [TreeView]如何在根节点[TreeView]找到子节点
【发布时间】:2010-09-22 09:04:14
【问题描述】:
 ROOT
      A 
        B
          C 
            D 
              E
        T
      F
      G
        X

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

【问题讨论】:

  • @Özkan:4 号是多少?你想找到深度吗?
  • @Albin,是的,我想找到一个节点的深度。
  • D 是 E 的父母。 D 的父母是 C。
  • 您可能使用一些数据源来填充树视图。它是什么样的数据源?您可以遍历树视图并计算跳数,直到到达根节点 - 但使用 UI 来实现业务逻辑会非常糟糕。
  • @Goran。我有 TBLPRODUCTCATEGORYHIERARCHY 表。有 2 列名称分别是 categoryId 和 parentCategoryId。根节点的 parentCategoryId 编号为 0。

标签: c# asp.net webforms treeview


【解决方案1】:

我建议使用递归迭代。

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 然后简单地返回 如果返回的节点的 parent 属性是你所追求的父节点。

tn treenode = FindNode(myTreeview, "E")

tn.parent 是您所追求的值。

【讨论】:

    【解决方案2】:
        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;
        }
    

    【讨论】:

      【解决方案3】:

      我很好奇,既然这被标记为 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.";
        }
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-16
        • 2013-04-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多