VB.net使用父子关系使用DataSet填充TreeView

时间:2011-09-25 05:46:27

标签: vb.net treeview dataset

我正在开发一个允许我在DataGridView中编辑XML数据的程序。我有大部分工作,但我不喜欢我目前的TreeView结构。

我将XML数据加载到DataSet中并在那里进行编辑,这就是我更喜欢基于TreeView的东西。我尝试了一些诸如......之类的东西。

Private Sub updateTree()
    'Clear All Previous TreeView Nodes
    TreeView1.Nodes.Clear()
    'Loop Through XML Nodes and Add them to the Tree
    For Each table As DataTable In ds.Tables
        Dim node As New TreeNode(table.TableName)
        If table.ChildRelations.Count = 0 Then
            node.Text = table.TableName
            node.Tag = table.TableName
            TreeView1.Nodes.Add(node)
        Else
            node.Tag = table.TableName
            node.Text = table.TableName & " - No Child Objects"
            TreeView1.Nodes.Add(node)
        End If
    Next
End Sub

我真正想要的是一个树视图,显示嵌套的Parent Child对象。在这种情况下,我不确定如何实现这一点......任何想法?我找到了这篇文章,但没有更多的潜在客户......

Adding Nested Treeview Nodes in VB.NET?

感谢。

1 个答案:

答案 0 :(得分:1)

我找到了一种方法来解决我想要做的事情。我认为因为DataSet包含父子关系,所以我可以使用它们来构建我的树视图。

DataSet包括两个属性,父关系和子关系。我指望那些确定他们在关系树中的位置。使用if语句,我首先填充父节点,因为顶级父节点没有父节点。然后我检查父母是否有孩子,然后填充,最后,我用一个计数器来填充孙子节点。

'Sub for calling a treeview update when needed
Private Sub updateTree()
    'Clear All Previous TreeView Nodes
    TreeView1.Nodes.Clear()
    'Loop Through the database examining the Parent child relationship and Add the nodes to the Tree
    Dim i As Integer = 0
    For Each table As DataTable In ds.Tables
        Dim node As New TreeNode(table.TableName)
        If table.ParentRelations.Count = 0 Then
            node.Text = table.TableName & " -Parent"
            node.Tag = table.TableName
            TreeView1.Nodes.Add(node)
        ElseIf table.ParentRelations.Count = 1 And table.ChildRelations.Count = 1 Then
            node.Tag = table.TableName
            node.Text = table.TableName & "-Child"
            TreeView1.Nodes(0).Nodes.Add(node)
        ElseIf table.ChildRelations.Count = 0 And table.ParentRelations.Count = 1 Then
            node.Tag = table.TableName
            node.Text = table.TableName & "-Grandchild"
            TreeView1.Nodes(0).Nodes(i).Nodes.Add(node)
            i += 1
        End If
    Next 

与往常一样,如果有人有更好的想法,我会全力以赴:)

...谢谢