Treenode Rekursiv aus Datenbank lesen, mit mehreren ersten Nodes

  • VB.NET
  • .NET (FX) 3.0–3.5

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Treenode Rekursiv aus Datenbank lesen, mit mehreren ersten Nodes

    Hallo,

    Ich habe es bereits geschafft ein TreeView mit Daten aus einer Datenbank zu befüllen. Leider komme ich nicht darauf, wie man mehrere "Main Nodes" erstellt.
    Folgende Struktur Funktioniert:

    HTML-Quellcode

    1. +MainNode
    2. +UnterNode1
    3. +UnterNode2
    4. + Unter-UnterNode1

    ich möchte aber folgende Struktur:

    HTML-Quellcode

    1. +MainNode1
    2. +UnterNode5
    3. +MainNode2
    4. +UnterNode1
    5. +UnterNode2
    6. + Unter-UnterNode1
    7. MainNode3
    8. +UnterNode4


    Das liegt daran, dass meine Rekursive Funktion ein Node erwartet, an das alles angehängt wird. Gibt es eine Möglichkeit ein leeres TreeNode zu erstellen, an dem dann alle Unterelemente hängen?
    Hier mein SourceCode:

    dbKlasse:

    VB.NET-Quellcode

    1. Public Sub getTreeNodes(ByVal parentID As Long, ByRef Node As TreeNode)
    2. Try
    3. If parentID < 0 Then Throw New Exception("ParentID darf nicht <=0 sein!")
    4. Dim dt As New DataTable
    5. Dim strSQL As String = ""
    6. Dim db As New ATdbSQLServer
    7. strSQL = "SELECT Name, pid "
    8. strSQL &= " FROM dbo.Baumstruktur "
    9. strSQL &= "WHERE (parentPID = " & parentID & ") "
    10. dt = db.dsGetValues(strSQL)
    11. If IsNothing(dt) Or dt.Rows.Count = 0 Then Return
    12. For Each dr As DataRow In dt.Rows
    13. Dim NewNode As New TreeNode(dr("Name"))
    14. NewNode.Tag = dr("pid")
    15. getTreeNodes(dr("pid"), NewNode)
    16. Node.Nodes.Add(NewNode)
    17. Next
    18. Catch ex As Exception
    19. Throw ex
    20. End Try
    21. End Sub
    22. 'Aufruf:
    23. Dim Nd As New System.Windows.Forms.TreeNode("Ungewünschter MainNode") 'Diese Nodeanlegen sollte auf irgend eine art entfernt werden.
    24. Nd.Expand()
    25. getTreeNodes(0, Nd)
    26. TreeView1.Nodes.Add(Nd)



    Schon Danke im Voraus
    Liebe Grüße
    Rekursive Strukturen sind extrem unperformant von Datenbanken abzufragen. Falls deine DB-Tabelle weniger als 50000 Nodes aufweist, ist performanter, die komplett zu laden, und den Treeview-Aufbau im Speicher des Client-Programms zu absolvieren, statt u.u. aus einer rekursiven Methode hunderte von Abfragen an die Db abzusetzen.

    Der andere Punkt ist, dass du die Rekursion in ungeeigneter Weise aufziehst, nämlich als was ich "Root-Rekursion" nenne. Gugge dazu diesen Artikel: mycsharp.de/wbb2/thread.php?postid=343618#post343618

    ach - nochwas: Option Strict On!