Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.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 如何在所选节点添加新的treeview?_Vb.net - Fatal编程技术网

Vb.net 如何在所选节点添加新的treeview?

Vb.net 如何在所选节点添加新的treeview?,vb.net,Vb.net,我有一个四级的树视图;父母,孩子,孙子,曾孙。我的selectednode处于孙子级别 我想做的是在孙子节点创建一个新的“Treeview”-不,我不想为“selectednode”(孙子节点)创建一个新节点。所以应该是这样的: 母公司 小孩 孙辈(新树视图)是孙辈的父母 曾孙子女 曾孙 孙子孙女 这将类似于父母表,在该表中,母亲和父亲离开并与其他配偶生下了新孩子,而不是现有子女的配偶 Private Sub PopulateRootLevel() ' query

我有一个四级的树视图;父母,孩子,孙子,曾孙。我的selectednode处于孙子级别

我想做的是在孙子节点创建一个新的“Treeview”-不,我不想为“selectednode”(孙子节点)创建一个新节点。所以应该是这样的:

母公司 小孩 孙辈(新树视图)是孙辈的父母
曾孙子女
曾孙 孙子孙女

这将类似于父母表,在该表中,母亲和父亲离开并与其他配偶生下了新孩子,而不是现有子女的配偶

   Private Sub PopulateRootLevel()
            ' query to find first round of parent
            PopulateNodes(dt, JCATreeView.Nodes)
    End Sub

Private Sub PopulateNodes(ByVal dt As DataTable, ByVal nodes As TreeNodeCollection)
        For Each dr As DataRow In dt.Rows
            Dim tn As New TreeNode()
            tn.Text = dr("TITLE").ToString()
            tn.Value = dr("Parent_ID").ToString()
            nodes.Add(tn)

            'If node has child nodes, then enable on-demand populating
            tn.PopulateOnDemand = (CInt(dr("childnodecount")) > 0)
        Next
End Sub

Private Sub PopulateSubLevel(ByVal parentid As Integer, ByVal parentNode As TreeNode)

        ' query to find children of parent with child node count of parent
         da.Fill(dt)
        PopulateNodes(dt, parentNode.ChildNodes)
End Sub

Protected Sub TreeView1_TreeNodePopulate(ByVal sender As Object, _
  ByVal e As System.Web.UI.WebControls.TreeNodeEventArgs) Handles TreeView1.TreeNodePopulate
        ' add a test to determine if this is from TreeView1 or Sub_TreeView1
         PopulateSubLevel(CInt(e.Node.Value), e.Node)
End Sub

Protected Sub TreeView1_SelectedNodeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TreeView1.SelectedNodeChanged

        Dim selected_parent_id As Integer = sender.SelectedNode.value
        Parent_to_NEW_TREEVIEW_PopulateSubLevel(selected_parent_id, sender.SelectedNode)
End Sub

Private Sub Sub_TreeView1_PopulateSubLevel(ByVal parent_id As Integer, ByVal parentNode As TreeNode)

        ' Query to get new children of parents
        da.Fill(dt2)
        Sub_TreeView1_PopulateNodes(dt2, parentNode.ChildNodes)
End Sub

    Private Sub Sub_TreeView1_PopulateNodes(ByVal dt As DataTable, ByVal nodes As TreeNodeCollection)
        For Each dr As DataRow In dt.Rows
            Dim tn As TreeNode = New TreeNode()
            'tn = parentBCNode.Nodes.Add("NEW_PARENT_TREEVIEW")

            ' query to get child on the new parent treeview

            tn.Text = dr("New parent title").ToString()
            tn.Value = dr("New_parent_ID").ToString()
            nodes.Add(tn)

            'If node has child nodes, then enable on-demand populating
            tn.PopulateOnDemand = (CInt(dr("childnodecount")) > 0)
        Next
    End Sub
你不能那样做。 TreeView不能将另一个TreeView控件作为其子节点之一。您唯一能做的就是将TreeView指定给TreeNode的tag属性,但它不会显示(显然)。 我不明白你为什么要这么做,除非你想让那棵孙子树有不同的绘图行为。 您可以使用treeNode.Level属性找出该节点位于哪个级别。同样,您可以创建一个自定义对象(包含所有必需的信息)并将其存储在treeNode.Tag属性中。

新的“treeview”只是另一个节点。真正的问题是新节点应该添加到哪里?它是所选节点的同级节点吗?