Vb.net 将新的子节点添加到特定的父节点
我正在尝试将新的子节点添加到特定的父节点中 问题是我找不到可用于指定要使用哪个父节点的属性。Vb.net 将新的子节点添加到特定的父节点,vb.net,visual-studio-2012,Vb.net,Visual Studio 2012,我正在尝试将新的子节点添加到特定的父节点中 问题是我找不到可用于指定要使用哪个父节点的属性。 我唯一能用的是: TreeView1.SelectedNode.Nodes.Add(newNode) 但我不想使用SelectedNode 我需要的应该是这样的: TreeView1.ParentNode(Me.ds_Tables.Table.Rows(a).Item(0)).Nodes.Add(newNode) 编辑: 因此,我编写ParentNode只是为了明确这是一个我将向其中添加新
我唯一能用的是:
TreeView1.SelectedNode.Nodes.Add(newNode)
但我不想使用SelectedNode
我需要的应该是这样的:
TreeView1.ParentNode(Me.ds_Tables.Table.Rows(a).Item(0)).Nodes.Add(newNode)
编辑:因此,我编写ParentNode只是为了明确这是一个我将向其中添加新节点的节点。
节点和datatable之间的关系是,我使用表列结果为节点命名 问题是我的表看起来像(
id,code,name,parentId
)parentId
是该表中的id列。因此,当parentId被填充时(不是Null
),这意味着该结果是该表中另一个结果的一部分。(我希望这对你来说是清楚的,如果不是,我会尝试用不同的方式解释)
因此,基本上,我必须找到所有填写了parentId
的结果,找到哪个结果拥有它,并将该名称放入“父节点”中。选项1
似乎您在某个点同时读取所有数据,然后构建树。如果是这种情况,您可以在将树节点添加到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
使用标记
属性并为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
您可以遍历
TreeView1
的所有节点并搜索正确的节点。要知道正确的位置,您可以使用TreeNode
对象的Tag
属性,该属性可以保存任意数据。@WeSt是的,我想我可以使用标记,但这似乎是一个双重任务,毫无意义,这是我已经在做的事情。我只是想用一两行代码来实现这一点,我希望这是可能的。然后,您需要告诉我们更多一些表行和节点之间的关系,以及您在说ParentNode(…)
@WeSt时的意思。我刚刚编辑了我的问题。我讨厌我不得不写这个,但是我用vb.net标签发布了我的问题:)@Hoh-haha-oh-yeah,对不起^^一秒钟:)是的,这很有帮助。非常感谢,很抱歉没有及时回复;)
TreeView.Nodes.Find(parentID).AddNodes(...)