TreeView aufgebohrt
TreeView mit Kategorien und Artikeln füllen
Das Füllen des TreeView-Steuerelements übernimmt die Routine TreeViewFuellen aus Listing 1, die von der Ereignisprozedur Form_Open aufgerufen wird. Sie enthält zwei verschachtelte Do- While-Schleifen: Die äußere durchläuft alle Datensätze der Tabelle Kategorien und legt für jede Kategorie einen Knoten im TreeView-Steuerelement an. Die innere Do-While-Schleife öffnet für jede Kategorie eine Datensatzgruppe mit den zur Kategorie gehörenden Artikeln und fügt diese als Child-Elemente zum jeweiligen Kategorie Knoten hinzu.
Option Compare Database
Option Explicit
Private objTreeView As MSComctlLib.TreeView
Private Sub Form_Open(Cancel As Integer)
TreeViewFuellen
End Sub
Private Sub TreeViewFuellen()
Dim db As DAO.Database
Dim rstKategorien As DAO.Recordset
Dim rstArtikel As DAO.Recordset
Dim objNode As MSComctlLib.Node
Set objTreeView = Me.ctlTreeView.Object
Set db = CurrentDb
Set rstKategorien = db.OpenRecordset("Kategorien", dbOpenDynaset)
With objTreeView
Do While Not rstKategorien.EOF
Set objNode = objTreeView.Nodes.Add()
With objNode
.Key = "kat" & rstKategorien![Kategorie-Nr]
.Text = rstKategorien!Kategoriename
End With
Set rstArtikel = db.OpenRecordset("SELECT [Artikel-Nr], Artikelname
FROM Artikel WHERE [Kategorie-Nr] = " & rstKategorien![Kategorie-Nr], dbOpenDynaset)
Do While Not rstArtikel.EOF
objTreeView.Nodes.Add objNode, tvwChild, "art" & rstArtikel![Artikel-
Nr], rstArtikel!Artikelname
rstArtikel.MoveNext
Loop
rstKategorien.MoveNext
Loop
End With
End Sub
Erwähnenswert ist in diesem Zusammenhang, dass die Key-Eigenschaft jeweils aus der einer Zeichenkette („kat“ für Kategorie-Knoten und „art“ für Artikel-Knoten) und dem Primärschlüsselwert des jeweiligen Datensatzes besteht. Damit sorgen Sie nicht nur für die Vergabe eindeutiger Schlüssel, sondern erleichtern auch die Anzeige des Kontextmenüs für den jeweiligen Eintrag: Über die ersten drei Buchstaben („kat“ oder „art“) ermittelt die später vorgestellte Routine den Elementtyp und zeigt das passende Kontextmenü an.
Die Optik des Ergebnisses genügt nicht unbedingt höchsten Ansprüchen, reicht aber als Grundlage für das Hinzufügen von Kontextmenüs aus (Bild 2).