TreeView aus Datenbank mit mehreren Tabellen füllen

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Kleisophabo.

    TreeView aus Datenbank mit mehreren Tabellen füllen

    Hallo miteinander

    Ich würde gerne euch um Rat im folgenden Problem bitten. Zwar besitze ich eine MS-DB, welche 4 Tabellen besitzt. Jede Tabelle leite die nächste ab, sprich T1->T2->T3->T4. Nun möchte ich diese Struktur gerne in ein TreeView implentieren, so das es aussieht wie eine Ordnerstruktur.

    Hier ein kleines Beispiel der Tabelle: T1: t_Fahrzeug(ID_Fzg, Fahrzeugname) T2: t_Motor(ID_Motor, Motorname, ID_Fzg) T3: t_Bauteil(ID_Bauteil, Bauteilname, ID_Motor) T4: t_Aufgabe(ID_Aufgabe, Aufgabenname, ID_Bauteil)

    Der Treeview soll wie folgt aussehen:
    Liste
    |__Auto1
    | --- |____Motor1
    | ------ |_____Bauteil1
    | ------ |_____Bauteil2
    | --------- |_____Aufgabe1
    |__Auto2
    .
    .
    .

    Der Knotenname soll immer *name des jeweiligen Datensatzes sein. Mein Problem ist nun das folgende. Wie kann ich mich mir merken welcher Datensatz von T1 zu T2 gehört? Ich müsste es i-wie schaffen einen P-Key von T1 an T2 zu übergeben und diesen dann als F-Key in T2 suchen. Zudem müsste mein Ast dann wissen welcher P/F-Key er davor hatte, sonst weiß ich ja nicht welches childnode welchem parentnode angehört.

    Ich hatte bisher schon mehrere Ideen von rekusriven Funktionen über Schleifen bis zu XML-Schemas, jedoch konnte ich mit keiner ein Ergebniss erzielen. Mit meiner rekursion hatte ich das Problem die richtige Tabelle auszuwählen bzw mir den P/F-Key zu merken. Bei den Schleifen konnte ich ledglich alles untereinander schreiben(sprich keine relationen untereinander) und über xml-schema ist garnix geganngen.

    Ich hoffe ihr könnt mir weiterhelfen und danke schonmal im vorraus :)


    mfg Kleiso

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Kleisophabo“ ()

    Jetzt fühl ich mich richtig schlecht :/

    Ich natürlich schon über beides auf der suche nach einer Lösung gestolpert. Jedoch brachte mich keins weiter. Anfangs. Jedoch wollte ich gerade ausprobieren wieso es damals nicht funktioniert hat und dabei hatte ich die zündente Idee, wie ich es zum laufen bringen könnte.
    Nunja bissal rumdoktorn und einen Try/Catch-Block später liefs. Nun habe ich sogar 2! funktionierende Lösungen.

    Insofern vielen dank und tut mir leid quasi einen unnötigen post gemacht zu haben.

    Quellcode

    1. Private Sub initTreeView()
    2. TreeView1.Nodes.Clear()
    3. Try
    4. Dim parentrow As DataRow
    5. Dim ParentTable As DataTable
    6. Dim i As Integer = 1
    7. Dim j As Integer = 101
    8. Dim k As Integer = 1001
    9. ParentTable = _DEINDATASET.Tables("t_ersteTabelle")
    10. TreeView1.Nodes.Add("Überschrift")
    11. TreeView1.Nodes(0).Tag = "0"
    12. For Each parentrow In ParentTable.Rows
    13. Dim parentnode As TreeNode
    14. parentnode = New TreeNode(parentrow.Item(1)) ' Hier wird dem Objekt die erste Zeile der zweiten Spalte übergeben
    15. TreeView1.Nodes(0).Nodes.Add(parentnode) ' wird am ersten Ast ein Zweig hinzugefügt welches unseren Anzeigetext und den Tag enthält
    16. parentnode.Tag = CStr(i)
    17. i += 1
    18. ''''populate child'''''
    19. '''''''''''''''''''''''
    20. Dim childrow As DataRow
    21. Dim childnode As TreeNode
    22. childnode = New TreeNode()
    23. For Each childrow In parentrow.GetChildRows("HIER SOLL DIE VERBINDUNG ZWISCHEN DER 1. UND 2. TABELLEN STEHEN")
    24. childnode = parentnode.Nodes.Add(childrow(1) )
    25. childnode.Tag = CStr(j)
    26. ''''populate child2''''
    27. ''''''''''''''''''''''''''
    28. Dim childrow2 As DataRow
    29. Dim childnode2 As TreeNode
    30. childnode2 = New TreeNode()
    31. j += 1
    32. For Each childrow2 In childrow.GetChildRows("HIER SOLL DIE VERBINDUNG ZWISCHEN DER 2. UND 3. TABELLEN STEHEN")
    33. childnode2 = childnode.Nodes.Add(childrow2(1))
    34. childnode2.Tag = CStr(k)
    35. k += 1
    36. Next childrow2
    37. ''''''''''''''''''''''''
    38. Next childrow
    39. '''''''''''''''
    40. Next parentrow
    41. Catch ex As Exception
    42. MsgBox(ex.Message)
    43. End Try
    44. End Sub



    Die Tags füge ich hinzu damit ich später im Afterselectevent weiß in welchem Ast ich mich befinde

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Kleisophabo“ ()