我已经获得了一个可以使用的数据集,其格式为
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
我需要它看起来像这样
我看过这里的代码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,但如果有人能帮助我,我将非常感激。
答案 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