子节点上的子节点的ASP.net Treeview

时间:2015-11-11 19:01:03

标签: asp.net .net vb.net treeview

我已经获得了一个可以使用的数据集,其格式为

Object | Type | Level | Comments | Parent | Child

到目前为止,我已经能够将Object作为父节点并将注释作为子节点,但是我需要为这个父节点获取多个子节点,然后为它们生成子节点

我的意思是如此

Object | Type | Level | Comments | Parent | Child
Dave   | WH   | 1     | comment  | root   | null
Simon  | WH   | 1     | comment  | root   | Fortnum
Simon  | WH   | 1     | comment  | root   | Mason
Tim    | WH   | 1     | comment  | root   | null
wallace| WH   | 2     | comment  | Simon  | null
Mason  | WH   | 2     | comment  | Simon  | Mouse
Mouse  | WH   | 3     | comment  | Mason  | null

我需要它看起来像这样

enter image description here

我看过这里的代码Similar Stack Answer,但它不适合我

我将sql数据拉入数据表,然后循环遍历它以尝试构建树视图。

这是我正在使用的代码,它只是将对象作为父节点,然后将注释作为子节点,但我需要能够找到它的实际子节点,然后将它们添加到树视图。

        For Each row As DataRow In dt.Rows
        node = Searchnode(row.Item(4).ToString(), TreeView1)
        If node IsNot Nothing Then
            subNode = New TreeNode(row.Item(3).ToString())
            node.ChildNodes.Add(subNode)
        Else
            node = New TreeNode(row.Item(0).ToString())
            subNode = New TreeNode(row.Item(3).ToString())
            node.ChildNodes.Add(subNode)
            TreeView1.Nodes.Add(node)
        End If
     Next

然后是函数

Private Function Searchnode(ByVal nodetext As String, ByVal trv As TreeView) As TreeNode
    For Each node As TreeNode In trv.Nodes
        If node.Text = nodetext Then
            Return node
        End If
    Next
End Function

我之前从未在ASP.Net中使用过treeviews,但如果有人能帮助我,我将非常感激。

1 个答案:

答案 0 :(得分:-1)

添加新节点时无需添加子节点。如果数据表按照您的示例显示的方式排序,则在将父项已添加到树视图后,子节点将提供对其父项的引用。 所以在此示例之前编辑数据表并删除重复的对象 喜欢删除一个西蒙斯。不需要(子)列。还可以(可选)在添加子项时添加对父项的引用。

For Each row As DataRow In dt.Rows
    node = Searchnode(row.Item(4).ToString(), TreeView1.Nodes)
    If node IsNot Nothing Then
        subNode = New TreeNode(row.Item(0).ToString()){ parent= node }
        node.Nodes.Add(subNode)
    Else 'root node
        node = New TreeNode(row.Item(0).ToString())
        TreeView1.Nodes.Add(node)
    End If
Next

还需要递归searchnode来检查子节点。

Private Function Searchnode(ByVal nodetext As String, ByVal tn As TreeNodeCollection) As TreeNode
    TreeNode ret = nothing
    For Each node As TreeNode In tn.Nodes
        If node.Text = nodetext Then
            ret = node
            exit for
        Else 
           ret = Searchnode(nodetext, node.Nodes)
        End If
    Next
    Return ret
End Function