Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 将新的子节点添加到特定的父节点_Vb.net_Visual Studio 2012 - Fatal编程技术网

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(...)