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.
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).
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: