如何使用“n”填充树视图?数据表的层次结构级别? [英] How can I populate a treeview with "n" levels of hierarchy from a datatable?
本文介绍了如何使用“n”填充树视图?数据表的层次结构级别?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
这段代码是硬编码的,可以将我的Tasks TreeView填充到三个级别。但是,我的任务列表在层次结构中可能有n级别,我想摆脱硬编码并提高灵活性。我的代码:
This block of code is hard-coded to populate my Tasks TreeView down to three levels. However, my list of Tasks could have "n" levels in the hierarchy and I want to get rid of the hard-coding and improve flexibility. My code:
TasksHierarchy.Nodes.Clear()
'populate treeview - add all top-level tasks
For Each dr As DataRow In DataSet1.DataTable1
If dr.Item("ParentTaskID").Equals(DBNull.Value) Then
'task is at the top level
TasksHierarchy.Nodes.Add("Task: " & dr.Item("TaskName") & "Task Type: " & dr.Item("TaskTypeName") & " - Owner: " & dr.Item("Name"))
End If
Next
'add all second-level tasks
Dim child As Integer = 0
Dim grandchild As Integer = 0
For Each dr2 As DataRow In DataSet1.DataTable1
For Each dr2Child As DataRow In BacklogView.DataSet1.DataTable1.Select("ParentTaskID='" & dr2.Item("JobTaskID") & "'")
If child < TasksHierarchy.Nodes.Count - 1 Then
TasksHierarchy.Nodes(child).Nodes.Add("Task: " & dr2Child.Item("TaskName") & " - Task Type: " & dr2Child.Item("TaskTypeName") & " - Owner: " & dr2Child.Item("Name"))
End If
'add all third-level tasks
For Each dr2GrandChild As DataRow In DataSet1.DataTable1.Select("ParentTaskID='" & dr2Child.Item("JobTaskID") & "'")
TasksHierarchy.Nodes(child).Nodes(grandchild).Nodes.Add("Task: " & dr2GrandChild.Item("TaskName") & " - Task Type: " & dr2GrandChild.Item("TaskTypeName") & " - Owner: " & dr2GrandChild.Item("Name"))
Next
grandchild = grandchild + 1
Next
child = child + 1
Next
我尝试了什么:
我尝试制作分层DataGridView来显示依赖关系但是从在线示例的C#转换为VB.Net不起作用,程序崩溃。
What I have tried:
I have tried making a hierarchical DataGridView to show the dependencies but converting from the online example's C# to VB.Net did not work and the program crashed.
推荐答案
遍历任意深层次的数据结构。
嗯....
这看起来像是一份工作: 递归
顶级处理基本相同,只是在Add()
sa节点之后,它调用一个递归函数来处理直接的孩子。在该函数中,当一个节点Add()
ed时,再次调用相同的函数来处理其子项等。
(这是Depth-first tree traversal。)
==========
这样的东西(我不是一个复杂的VB开发者.C#是的。):
Traversing an arbitrarily deep hierarchical data structure.
Hmmmm....
This looks like a job for: Recursion
The top level processing is essentially the same, except that after itAdd()
s a node, it calls a recursive function that deals with the direct children. In that function, when a node isAdd()
ed, the same function is called again to process its children, etc.
(This is a "Depth-first tree traversal".)
==========
Something like this (I'm not a sophisticated VB dev. C# yes.):
' At the appropriate place in the code...
Private Sub AddDescendents(ByVal nodes As TreeNodeCollection, ByVal data As DataTable, ByVal taskID as String)
For Each dr As DataRow in data.Select("ParentTaskID='" & taskID & "'")
Dim newNode As TreeNode
newNode = nodes.Add("Task: " & dr.Item("TaskName") & _
" - Task Type: " & dr.Item("TaskTypeName") & _
" - Owner: " & dr.Item("Name"))
AddDescendents(newNode.Nodes, data, dr.Item("JobTaskID"))
Next
End Sub
' elsewhere ...
TasksHierarchy.BeginUpdate()
TasksHierarchy.Nodes.Clear()
Dim nodes As TreeNodeCollection = TasksHierarchy.Nodes
'populate treeview - add all top-level tasks
For Each dr As DataRow In DataSet1.DataTable1
If IsDBNull(dr.Item("ParentTaskID")) Then
'task is at the top level
Dim newNode As TreeNode
newNode = nodes.Add("Task: " & dr.Item("TaskName") & _
" - Task Type: " & dr.Item("TaskTypeName") & _
" - Owner: " & dr.Item("Name"))
AddDescendents(newNode.Nodes, DataSet1.DataTable1, dr.Item("JobTaskID"))
End If
Next
TasksHierarchy.EndUpdate()
(如果我更了解VB,可以合并一些复制......)
(Some of the duplication could be consolidated if I knew VB better...)
这篇关于如何使用“n”填充树视图?数据表的层次结构级别?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文