【问题标题】:Adding new child-Node to specific parent-Node将新的子节点添加到特定的父节点
【发布时间】:2015-01-05 21:18:12
【问题描述】:

我正在尝试将新的子节点添加到特定的父节点中。

问题是我找不到可以用来指定要使用哪个父节点的属性。
只有我能用的是:

 TreeView1.SelectedNode.Nodes.Add(newNode)  

但我不想使用SelectedNode

我需要的应该是这样的:

TreeView1.ParentNode(Me.ds_Tables.Table.Rows(a).Item(0)).Nodes.Add(newNode)  

编辑:
所以,我写了 ParentNode 只是为了清楚地表明这是一个我将添加一个新节点的节点。
节点和数据表之间的关系是我使用表列结果为节点命名。

问题是我的表看起来像 (id, code, name, parentId) parentId 是该表中的 id 列。因此,当 parentId 被填充(不是Null)时,这意味着该结果是该表中另一个结果的一部分。 (我希望这对你来说很清楚,如果不是,我会尝试以不同的方式解释)。

所以,基本上我必须找到填充了parentId 的所有结果,并找到拥有它的结果并将该名称放入该“父节点”中。

【问题讨论】:

  • 可以遍历TreeView1的所有节点,找到合适的。要知道右边是哪个,可以使用TreeNode 对象的Tag 属性,该对象可以保存任意数据。
  • @WeSt 是的,我以为我可以使用标签,但这似乎是一项双重工作,没有任何意义,这是我已经在做的事情。我只是在寻找一种方法来用一两行代码做到这一点,我希望这是可能的。
  • 那么你需要告诉我们更多表格行和节点之间的关系以及你说ParentNode(...)时的意思。
  • @WeSt 我刚刚编辑了我的问题。

标签: vb.net visual-studio-2012


【解决方案1】:

选项 1

您似乎在某个时间点一次读取所有数据,然后构建树。如果是这种情况,您可以在将 TreeNodes 添加到 TreeView 之前完全构建它们:

Dim items As New List(Of Item)()
Dim map As New Dictionary(Of Integer, TreeNode)()

' first, create all TreeNode objects
For Each item As var In items
    Dim node As New TreeNode()
    ' set node values
    map.Add(item.Id, node)
Next

' second, construct the relations
For Each item As var In items
    Dim node = map(item.Id)
    If item.ParendID.HasValue Then
        map(item.ParentID).Nodes.Add(node)
    Else ' no parent = root node
        TreeView.Nodes.Add(node)
    End If
Next

选项 2

如果您的树是动态的,您仍然可以保留一个全局字典,指示哪个Id 链接到哪个TreeNode

Private map As New Dictionary(Of Integer, TreeNode)();

选项 3

使用Tag 属性并为TreeNodeCollection 编写扩展方法:

<System.Runtime.CompilerServices.Extension> _
Public Shared Function Find(nodes As TreeNodeCollection, item As Object) As TreeNode
    For Each node As var In nodes
        If node.Tag IsNot Nothing AndAlso node.Tag.Equals(item) Then
            Return node
        End If
    Next
    Return Nothing ' or throw an exception
End Function

然后使用

TreeView.Nodes.Find(parentID).AddNodes(...)

【讨论】:

  • 我讨厌我必须写这个,但我用 vb.net 标签发布了我的问题 :)
  • @Hoh haha​​ 哦,是的,对不起 ^^ 一秒 :)
  • 是的,这有帮助。非常感谢,抱歉回复晚了;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-20
  • 2012-02-10
  • 2017-12-29
  • 1970-01-01
  • 2010-10-30
  • 1970-01-01
  • 2020-08-25
相关资源
最近更新 更多