Das TreeView-Steuerelement: Verknüpfte Daten, Teil I

Das TreeView-Steuerelement ist prädestiniert für die Anzeige von Daten aus hierarchisch verknüpften Tabellen. In diesem Artikel zeigen wir anhand der Daten aus einer Kunden-, Bestellungen- und Artikeltabelle in ein TreeView-Steuerelement einlesen und diese dabei hierarchisch anordnen. Dabei lernen Sie zwei verschiedene Arten kennen, die benötigen Daten zu durchlaufen und damit den Baum aufzubauen.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1309_TreeView.mdb.

TreeView mit Tabellendaten füllen

Als Access-Entwickler sind Sie natürlich interessiert, wie Sie das TreeView-Steuerelement mit den Daten aus einer oder mehreren Tabellen füllen. Im Wesentlichen gibt es folgende Szenarien:

  • Die Daten stammen aus hierarchisch verknüpften Tabellen wie tblKunden, tblBestellungen und tblBestellpositionen.
  • Die Daten stammen aus einer Tabelle mit reflexiver Verknüpfung.
  • Die beiden vorherigen Varianten werden kombiniert.

Wir schauen uns in der vorliegenden Artikelreihe zunächst die erste Variante an, um die weiteren kümmern wir uns in folgenden Beiträgen.

Kunden, Bestellungen und Artikel

Im ersten Beispiel soll das TreeView-Steuerelement die Daten der Tabellen tblKunden, tblBestellungen, tblBestelldetails und tblArtikel abbilden. Die Tabellen sind wie gefordert aufeinander aufbauend per 1:n-Beziehung miteinander verknüpft (siehe Bild 1). Das heißt, die Daten der Tabelle tblKunden sollen ganz links im TreeView angezeigt werden, die Daten der Tabelle tblBestellungen rechts unterhalb des jeweiligen Kunden und die Daten der Tabelle tblBestellpositionen wiederum rechts unterhalb der jeweiligen Bestellungen.

Datenherkunft für die Anzeige hierarchischer Daten im TreeView-Steuerelement

Bild 1: Datenherkunft für die Anzeige hierarchischer Daten im TreeView-Steuerelement

Dabei soll die Datenherkunft für diese Ebene im TreeView-Steuerelement nicht nur Daten der Tabelle tblBestellpositionen enthalten, sondern auch noch den Artikelnamen aus der mit dieser Tabelle verknüpften Tabelle tblArtikel.

Um dies zu erreichen, legen Sie zunächst ein neues Formular namens frmKundenBestellungenArtikel an und fügen diesem ein TreeView-Steuerelement hinzu, dass Sie mit dem Namen ctlTreeView versehen (siehe Bild 2).

Formular mit dem frisch hinzugefügten TreeView-Steuerelement in der Entwurfsansicht

Bild 2: Formular mit dem frisch hinzugefügten TreeView-Steuerelement in der Entwurfsansicht

Verweis auf das TreeView-Steuerelement

Das TreeView wollen wir wieder mit einer Variablen namens m_TreeView referenzieren, die wie folgt im Kopf des Klassenmoduls Form_frmKundenBestellungenArtikel deklariert wird (in einer Zeile):

Dim WithEvents m_Treeview As -MSComctlLib.TreeView

Damit diese Variable immer gefüllt ist und wir über den Ausdruck objTreeView immer darauf zugreifen können, also auch, wenn einmal ein Laufzeitfehler die Variable geleert hat, verwenden wir die Property-Prozedur objTreeView aus Listing 1.

Private Property Get objTreeView() As MSComctlLib.TreeView
     If m_Treeview Is Nothing Then
         Set m_Treeview = Me!ctlTreeView.Object
     End If
     Set objTreeView = m_Treeview
End Property

Listing 1: Die Property-Prozedur objTreeView liefert immer einen aktuellen Verweis auf das TreeView-Steuerelement.

Eigenschaften einstellen

Die Eigenschaften stellen wir gleich per Code ein – so brauchen Sie nur die Einstellungen vorheriger TreeView-Steuerelemente zu übernehmen. Die folgende Prozedur, die durch das Ereignis Beim Laden des Formulars ausgelöst wird, nutzt auch gleich die Property-Prozedur objTreeView, um das TreeView-Steuerelement zu referenzieren:

Private Sub Form_Load()
     With objTreeView
         .Appearance = ccFlat
         .BorderStyle = ccNone
         .LineStyle = tvwRootLines
         .Style = _
             tvwTreelinesPlusMinusText
     End With
     TreeViewFuellen
End Sub

Damit stellen wir die Eigenschaften zunächst wie in den Beispielen der bisherigen Artikel zum Thema TreeView-Steuerelement ein.

Kunden hinzufügen

Nun folgt jedoch der Aufruf der Prozedur TreeViewFuellen, die wie in Listing 2 aussieht.

Private Sub TreeViewFuellen()
     Dim db As DAO.Database
     Dim rstKunden As DAO.Recordset
     Dim rstBestellungen As DAO.Recordset
     Dim rstPositionen As DAO.Recordset
     Set db = CurrentDb
     Set rstKunden = db.OpenRecordset("SELECT KundeID, Firma FROM tblKunden", dbOpenDynaset)
     Do While Not rstKunden.EOF
         objTreeView.Nodes.Add , , "k" & rstKunden!KundeID, rstKunden!Firma
         Set rstBestellungen = db.OpenRecordset("SELECT BestellungID, Bestelldatum FROM tblBestellungen WHERE KundeID = " _
             & rstKunden!KundeID, dbOpenDynaset)
         Do While Not rstBestellungen.EOF
             objTreeView.Nodes.Add "k" & rstKunden!KundeID, tvwChild, "b" & rstBestellungen!BestellungID, rstBestellungen!Bestelldatum
             Set rstPositionen = db.OpenRecordset("SELECT BestellpositionID, Artikelname FROM tblBestellpositionen " _
                 & "INNER JOIN tblArtikel ON tblBestellpositionen.ArtikelID = tblArtikel.ArtikelID WHERE BestellungID = " _
                 & rstBestellungen!BestellungID, dbOpenDynaset)
             Do While Not rstPositionen.EOF
                 objTreeView.Nodes.Add "b" & rstBestellungen!BestellungID, tvwChild, "p" & rstPositionen!BestellpositionID, _
                     rstPositionen!Artikelname
                 rstPositionen.MoveNext
             Loop
             rstBestellungen.MoveNext
         Loop
         rstKunden.MoveNext
     Loop
End Sub

Listing 2: Füllen des TreeView-Steuerelements mit den Daten aus drei verknüpften Tabellen

Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar