Home > Artikel > Ausgabe 9/2013 > Das TreeView-Steuerelement: Verknüpfte Daten, Teil I

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

Achtung: Sie sind nicht angemeldet. Wenn Sie Abonnent sind und sich anmelden, lesen Sie den kompletten Artikel, laden das PDF herunter oder probieren die Beispieldatenbank aus (sofern vorhanden).

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

Sie haben das Ende des frei verfügbaren Teil dieses Artikels erreicht!

Wenn Sie mehr lesen und auf viele weitere Artikel zugreifen möchten, melden Sie sich als Abonnent unter Login an. Falls nicht, bestellen Sie doch einfach ein Jahresabonnement!