Datenbankausgabe rekrusiv in Treeview

  • VB.NET

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von mbfan.

    Datenbankausgabe rekrusiv in Treeview

    Hi,
    ich habe ein kleines Problem:
    Ich benutze die MySqlLib3, um aus einer Datenbanktabelle die Einträge in eine Treeview einzufügen.
    Die Datenbanktabelle sieht ungefähr so aus:
    id Kategoriename Oberkategorie
    1 Obere Kategorie 0
    2 Mittelere Kategorie 1
    3 Untere Kategorie 2
    4 Unterste Kategorie 3

    Ich benutze folgenden Code, um es in die Treeview zu packen:

    VB.NET-Quellcode

    1. Dim rc As MySqlLib.ResultCollection = db.Query("SELECT * FROM `radio_kategorien`")
    2. If rc.Row.Count > 0 Then
    3. For Each kategorie As MySqlLib.ResultCollection.ResultItem In rc.Row
    4. If kategorie.Column("Oberkategorie") = "0" Then
    5. Dim node As New TreeNode
    6. node.Text = kategorie.Column("Kategoriename")
    7. node.Tag = kategorie.Column("id")
    8. GUIHelper.InvokeMethod(Me, "knoten", TreeView1, node)
    9. End If
    10. Next
    11. For Each kategorie As MySqlLib.ResultCollection.ResultItem In rc.Row
    12. If kategorie.Column("Oberkategorie") = "0" Then
    13. Else
    14. Dim nodes As TreeNodeCollection
    15. nodes = TreeView1.Nodes
    16. Dim nodecount As Integer = 0
    17. Try
    18. Do
    19. For Each subnode As TreeNode In nodes.Item(nodecount).Nodes
    20. nodes.Add(subnode)
    21. Next
    22. nodecount += 1
    23. Loop
    24. Catch ex As Exception
    25. End Try
    26. Dim newnode As New TreeNode
    27. newnode.Text = kategorie.Column("Kategoriename")
    28. newnode.Tag = kategorie.Column("id")
    29. Dim added As Boolean = False
    30. For Each node As TreeNode In nodes
    31. Dim okid = kategorie.Column("Oberkategorie")
    32. If node.Tag.ToString = okid Then
    33. GUIHelper.InvokeMethod(Me, "knoten", node, newnode)
    34. added = True
    35. End If
    36. Next
    37. If added = False Then
    38. GUIHelper.InvokeMethod(Me, "knoten", TreeView1, newnode)
    39. End If
    40. End If
    41. Next
    (GUI-Helper: [VB.NET] GUIHelper)

    VB.NET-Quellcode

    1. Overloads Sub knoten(ByVal zuwas As TreeView, ByVal node As TreeNode)
    2. zuwas.Nodes.Add(node)
    3. End Sub
    4. Overloads Sub knoten(ByVal zuwas As TreeNode, ByVal node As TreeNode)
    5. zuwas.Nodes.Add(node)
    6. End Sub

    Leider funktioniert das nicht, so wie es soll.
    Er fügt zwar die Kategorie 4 unter 3 und die Kategorie 2 unter 1 ein, aber nicht 3 unter 2, wie es eigentlich sollte (id-Nummern)
    Kann mir jemand helfen?
    mbfan
    You should live for that what you belive. - Drag-Drop Beschreibung
    Hi,
    ich habe das ganze jetzt so funktionierend gelöst (für alle, die dasselbe Problem haben):

    VB.NET-Quellcode

    1. Overloads Sub knoten(ByVal zuwas As TreeView, ByVal node As TreeNode)
    2. zuwas.Nodes.Add(node)
    3. End Sub
    4. Overloads Sub knoten(ByVal zuwas As TreeNode, ByVal node As TreeNode)
    5. zuwas.Nodes.Add(node)
    6. End Sub
    7. Sub tv_hinzufügen(Optional ByVal überid As Integer = 0, Optional ByRef überknoten As TreeNode = Nothing)
    8. Dim rc As MySqlLib.ResultCollection = db.Query("SELECT * FROM `radio_kategorien` WHERE Oberkategorie='" & überid & "'")
    9. If rc.Row.Count > 0 Then
    10. For Each kategorie As MySqlLib.ResultCollection.ResultItem In rc.Row
    11. Dim node As New TreeNode
    12. node.Text = kategorie.Column("Kategoriename")
    13. node.Tag = kategorie.Column("id")
    14. tv_hinzufügen(CInt(kategorie.Column("id")), node)
    15. If überknoten Is Nothing Then
    16. GUIHelper.InvokeMethod(Me, "knoten", TreeView1, node)
    17. Else
    18. GUIHelper.InvokeMethod(Me, "knoten", überknoten, node)
    19. End If
    20. Next
    21. Else
    22. If überid = 0 Then
    23. Label1.Text = "Es gibt noch keine Kategorien - Bitte erstellen sie welche."
    24. End If
    25. End If
    26. End Sub
    27. Private Sub bgw_kategorien_DoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles bgw_kategorien.DoWork
    28. db.Encoding = Encoding.GetEncoding("ISO-8859-1")
    29. Try
    30. tv_hinzufügen()
    31. Catch scriptEx As MySqlLib.ScriptException
    32. MessageBox.Show(scriptEx.Message, "Script Fehler")
    33. Catch mysqlEx As MySqlLib.MySqlException
    34. MessageBox.Show(mysqlEx.ToShortString(), "MySql Fehler")
    35. 'Catch ex As Exception
    36. ' MessageBox.Show(ex.Message, "Allgemeiner Fehler")
    37. End Try
    38. Label1.Text = "Startsequenz abgeschlossen."
    39. End Sub
    40. End Class

    mbfan
    You should live for that what you belive. - Drag-Drop Beschreibung