VB.net Заполните TreeView с DataSet, используя отношения Родитель-ребенок - PullRequest
1 голос
/ 25 сентября 2011

Я работаю над программой, которая позволяет мне редактировать данные XML в DataGridView.У меня почти все работает, но мне не нравится моя текущая структура 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

Что я действительно хотел бы иметь, так это древовидное представление, в котором показаны вложенные родительские объекты.Я не уверен, как именно это сделать в этом случае ... Есть идеи?Я нашел эту статью, но у меня не так много потенциальных клиентов ...

Добавление вложенных узлов TreeView в VB.NET?

Спасибо.

1 Ответ

1 голос
/ 26 сентября 2011

Я нашел способ проблемного выполнения того, что я пытался сделать.Я подумал, что, поскольку 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 

Как всегда, если у кого-то есть идея получшеУ меня все уши:)

Спасибо ....

...