Abhängige Listenfelder

Die Programmierung abhängiger Kombinationsfelder haben wir bereits mindestens einmal behandelt. Hier soll ein Kombinationsfeld nur Werte abhängig von der Auswahl eines anderen Kombinationsfeldes anzeigen, also zum Beispiel die Artikel zu einer vorher gewählten Kategorie. Mit Listenfeldern geht das auch – dazu sind nur wenige Umstellungen nötig. Zumindest, wenn Sie im ersten Listenfeld nur die Auswahl eines Eintrags gleichzeitig erlauben. In diesem Beitrag wollen wir uns nicht nur das anschauen, sondern auch die Anzeige abhängiger Daten bei einem Listenfeld mit Mehrfachauswahl.

Abhängigkeit bei Kombinations-feldern

Bei abhängigen Kombinationsfeldern wie denen aus Bild 1 gelingt das Abbilden der Abhängigkeit wie folgt:

Abhängige Kombinationsfelder in der Entwurfsansicht

Bild 1: Abhängige Kombinationsfelder in der Entwurfsansicht

Das Kombinationsfeld cboKategorien zeigt die Werte der Felder KategorieID und Kategorie der Tabelle tblKategorien an. Wenn der Benutzer einen der Einträge auswählt, soll das zweite Kombinationsfeld cboArtikel nur noch die Artikel anzeigen, die zu der im ersten Kombinationsfeld gewählten Kategorie passen. Die Aktualisierung führen wir in der Ereignisprozedur aus, die durch das Wählen eines neuen Eintrags im Listenfeld cboKategorien ausgelöst wird, nämlich Nach Aktualisierung. Die Ereignisprozedur sieht so aus:

Private Sub cboKategorien_AfterUpdate()
     Dim strSQL As String
     strSQL = "SELECT ArtikelID, Artikelname FROM tblArtikel WHERE KategorieID = " & Nz(Me!cboKategorien)
     Me!cboArtikel.RowSource = strSQL
End Sub

Dadurch weisen wir der Eigenschaft Datensatzherkunft einen SQL-Ausdruck zu, der nur noch die Datensätze der Tabelle tblArtikel liefert, deren KategorieID im ersten Kombinationsfeld ausgewählt wurde. Das Ergebnis ist eine erheblich reduzierte Anzahl von Datensätzen im zweiten Kombinationsfeld (siehe Bild 2).

Auswahl abhängiger Datensätze

Bild 2: Auswahl abhängiger Datensätze

Umsetzung für abhängige Listenfelder

Wie unterscheidet sich dies, wenn wir statt Kombinationsfelder einfach Listenfelder verwenden Dazu kopieren wir dieses Formular frmAbhaengigeKombinationfselder in ein neues Formular namens frmAbhaengigeListenfelder und wandeln die Kombinationsfelder mit dem Kontextmenü-Eintrag Ändern zu|Listenfeld jeweils in Listenfelder um (siehe Bild 3).

Umwandeln von Kombinationsfeld in Listenfeld

Bild 3: Umwandeln von Kombinationsfeld in Listenfeld

Danach ändern wir noch die Position und Größe der Listenfelder, damit diese ausreichend Datensätze anzeigen können und nebeneinander angezeigt werden (siehe Bild 4).

Ausrichten der Listenfelder

Bild 4: Ausrichten der Listenfelder

Außerdem benennen wir die Listenfelder noch um von cboKategorien und cboArtikel in lstKategorien und lstArtikel. Damit brauchen wir nun nur noch das Ereignis Nach Aktualisierung neu zu implementieren. Hier ändern sich die Bezeichnungen von Prozedurname und den betroffenen Steuerelementen:

Private Sub lstKategorien_AfterUpdate()
     Dim strSQL As String
     strSQL = "SELECT ArtikelID, Artikelname FROM tblArtikel WHERE KategorieID = " & Nz(Me!lstKategorien)
     Me!lstArtikel.RowSource = strSQL
End Sub

Das Ergebnis sehen sie dann in Bild 5. Das Filtern gelingt genauso wie mit den Kombinationsfeldern.

Filtern per Listenfeld

Bild 5: Filtern per Listenfeld

Damit kommen wir zu den anspruchsvolleren Aufgaben – dem Filtern nach mehreren ausgewählten Kategorien.

Filtern mit Mehrfachauswahl

Bevor wir zur Praxis schreiten, kopieren wir das Formular frmAbhaengigeListenfelder in ein neues Formular namens frmAbhaengigeListenfelderMehrfach.

Um das Filtern mit Mehrfachauswahl zu implementieren, müssen wir erst einmal das Listenfeld lstKategorien so umstellen, dass es die Mehrfachauswahl anbietet (siehe Bild 6).

Aktivieren der Mehrfachauswahl

Bild 6: Aktivieren der Mehrfachauswahl

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar