Datenbank in TreeView abbilden

  • VB.NET

Es gibt 30 Antworten in diesem Thema. Der letzte Beitrag () ist von CamFreak.

    Nun ist es wieder so weit... ich habe jz eine bisschen komplexere Datenbank, wie in dem Bild zu sehen ist.
    Ich möchte im TreeView als Die "Maschinenummer" aus aus der Tabelle "Maschinennr" abbilden, darin dann die "Funktionsbaugruppe" aus "Funktionsbaugruppen" und darin die "Baugruppennummer" aus "Baugruppen".
    Wenn ich das habe kann ich den Rest natürlich selber machen, habe aber heute lange probiert es selbst hinzubekommen.
    Meine Frage, wie würde der Code, oder der Aufbau der For-Schleifen denn dann aussehen??
    Bilder
    • Datenbankabbild.PNG

      23,69 kB, 720×632, 368 mal angesehen
    Darunter kann ich mir nix vorstellen. Baugruppen und Funktionsbaugruppen sind doch voneinander unabhängig. Wie soll denn das dann aussehen? Schreib mal bitte ein Beispiel, wie das dann aussehen soll, z.B. mit Paint oder so:

    Quellcode

    1. ├Maschinennummer1
    2. │ │
    3. │ ├──> Funktionsbaugruppe1
    4. │ │ │
    5. │ │ ├───> BG1_in_FBG1
    6. │ │ │
    7. │ │ └───> BG2_in_FBG1
    8. │ │
    9. │ └───> Funktionsbaugruppe2
    10. └Maschinennummer2
    11. ├──> Funktionsbaugruppe3
    12. └──> Funktionsbaugruppe4

    Mir ist da nicht klar, wie da die Baugruppen eingearbeitet werden sollen. TreeView ist da m.E. das falsche CE.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

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

    Sorry für die späte Antwort.
    In einer Maschine sind mehrere Funktionsbaugruppen enthalten
    Die Funktionsbaugruppe ist eine Übergeordnete Baugruppe.
    Eine Funktionsbaugruppe setzt sich dann aus mehreren Baugruppen zusammen
    Baugruppen beeinhalten jedoch nur Artikel

    Und anderst herum:
    Artikel können in mehreren Baugruppen verwendung finden.
    Baugruppen könne in mehreren Funktionsbaugruppen verwendung finden.
    Funktionsbaugruppen könne in mehreren Maschinen verwendung finden.

    Die Zwischentabellen brauche in deswegen, weil ich einer Baugruppe mehrere Artikel hinzufügen möchte, der Artikel aber Gleichzeitig auch in mehreren Baugruppen stehen kann

    Ich habe mal die Access-Datei hochgeladen und ein Bild, wie es nacher im TreeView angezeigt werden sollte
    Und nochmal mal genaues Problem: Ich muss speziell aus der Funktionsbaugruppe die Baugruppe auslesen und da muss ich über die zwischentabelle gehen. und da scheiter ich zur Zeit ?(.
    In der Datenbank ist übrigens genau dieses Beispiel mit dem Rasenmäher aufgeführt, um es evtl. noch mal zu verdeutlichen, wobei es eigentlich nicht so kompliziert ist.
    Bilder
    • TreeView.PNG

      25,61 kB, 543×835, 216 mal angesehen
    Dateien
    • Rasenmäher.7z

      (442,05 kB, 181 mal heruntergeladen, zuletzt: )

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

    CamFreak schrieb:

    Eine Funktionsbaugruppe setzt sich dann aus mehreren Baugruppen zusammen

    Das geht aber nicht aus dem Datenmodell so hervor, sonst müsste die Baugruppentabelle eine Funktionsgruppen-ID, also einen Fremdschlüssel haben.
    Fragen wir doch mal das Orakel unsere (mir bekannten) Datenmodellexperten @ErfinderDesRades und @VB1963 wie die das sehen.

    CamFreak schrieb:

    weil ich einer Baugruppe mehrere Artikel hinzufügen möchte, der Artikel aber Gleichzeitig auch in mehreren Baugruppen stehen kann
    Das wird durch die untere Zwischentabelle zwischen Artikel und Baugruppe geregelt. Aber die obere ist bei der Erklärung unnötig.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Die
    Funktionsgruppen-ID
    wird in der BG_in_FBG Baugruppe geschrieben, du kannst dir mal die Datenbank anscheun, dann ist es evtl. ein wenig nachvollziehbarer warum ich die Zwischentabelle nutze

    Aber die obere ist bei der Erklärung unnötig.

    Stimmt, das habe ich vergesen. Mein Fehler. Es können auch meherere Funktionsbaugruppen einer Maschine zugeordnet sein

    Aus der accdb wurde ich nicht schlau, aber ich vermute mal, dass mehrere Baugruppen zu einer Funktionsgruppe gehören, aber dass eine Baugruppe auch zu mehreren Funktionsgruppen gehören könnten und nicht nur zu einer.
    Dann muss der Code von EdR nur wenig abgewandelt werden. Letztenendes muss in der Verknüpfungs-/Zwischentabelle nur auf die korrekte ParentRow zugegriffen werden. Da ich Dein tDS nicht habe, hoffe ich, dass ich durch Nachbau die korrekten Verknüpfungen innerhalb der Tabelle erwischt hab. Das Ende von Zeile#6 ist LINQ-Funktionalität.

    VB.NET-Quellcode

    1. Me.TreeView1.Nodes.Clear()
    2. For Each rwMachine In ds.Maschinennr
    3. Dim ndMachine = TreeView1.Nodes.Add(rwMachine.Maschinen_ID)
    4. For Each rwGroup In rwMachine.GetFunktionsbaugruppenRows
    5. Dim ndGroup = ndMachine.Nodes.Add(rwGroup.Funktionsbaugruppe)
    6. For Each rwModule In rwGroup.GetBG_in_FBGRows.Select(Function(x) x.BaugruppeRow)
    7. ndGroup.Nodes.Add(rwModule.Benennung)
    8. Next
    9. Next
    10. Next
    11. Me.TreeView1.ExpandAll()


    Scheint zu laufen:
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

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

    Vom Prinzip her sowas:

    VB.NET-Quellcode

    1. Private Sub TreeviewBefuellen(ds As DatenbankBildDataset, tv As TreeView)
    2. For Each rwMNr In ds.Maschinennr
    3. Dim ndMNr = tv.Nodes.Add(rwMNr.MaschinenRow.Name)
    4. For Each rwFunktionsGruppen In rwMNr.GetFunktionsGruppenRows
    5. Dim ndFunkGr = ndMNr.nodes.Add(rwFunktionsGruppen.FunktionsBauGruppen.FunktionsBauGruppe)
    6. For Each rwBiB In rwFunktionsGruppen.GetBG_in_BFRGRows
    7. Dim ndBauGrupp = ndFunkGr.nodes.add(rwBiB.BaugruppenRow.Benennung)
    8. For Each rwArtikl In rwBiB.GetArtikel_in_BGRows
    9. 'usw...
    10. Next
    11. Next
    12. Next
    13. Next
    14. End Sub
    Allerdings ist deine Dataset-Benamung höchst suboptimal.
    Und um meine Snippets zu verstehen solltest du das entsprechende Tut durcharbeiten:
    codeproject.com/Articles/1033145/Databinding-for-Beginners - da mindestens den Abschnitt "Benamungs-richtlinien"

    zB stört mich insgemein die Tabelle Maschinennr.
    Eine Nr ist nichts, woraus man eine Tabelle erstellt.
    Und wenn du deine Tabelle anguckst, wirst du sehen, dass es eine Verknüpfungs-Tabelle ist, deren Datensätze Maschinen mit Kunden verknüpfen.
    So muss sie denn unbedingt auch heissen (sonst ist das Chaos nicht weit): MaschineKunde

    und das FolgeTut
    codeproject.com/Articles/10351…ped-Dataset-for-Beginners
    Das klärt auf, was ich in meine Snippets hier eiglich mache, und warum ich weiss, wie in deim TypDataset die Funktions und Properties heissen.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „ErfinderDesRades“ ()

    VaporiZed schrieb:

    In rwGroup.GetBG_in_FBGRows.Select(Function(x) x.BaugruppeRow)
    das Select gehört zu den LINQ-Extensions, die die Arbeit (z.B. Element-Filterung) mit IEnumerables, Lists und Co. stark vereinfachen. schau einfach mal im Forum, wenn Du den Kopf dafür freiräumen kannst. Ist ganz praktisch.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.