Persistente Mehrfachauswahl im Listenfeld

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Das Auswählen von Listenfeldeinträgen mit Ein- oder Mehrfachauswahl macht dieses Steuerelement in vielen Fällen zu einer guten Alternative für Unterformulare. Allein das Auslesen der markierten Informationen bereitet den Entwicklern hier und da Probleme. Und schließlich möchten Sie vielleicht auch einmal die ausgewählten Einträge speichern und wiederherstellen – wie dies alles funktioniert, erfahren Sie in diesem Beitrag.

Warum sollten Sie Ihren Anwendern überhaupt eine Mehrfachauswahl per Listenfeld anbietenund diese dann auch noch im gleichen Steuerelement reproduzieren Der beste Grund ist immer ein Beispiel, das einen Anlass liefert. In diesem Beitrag ist das ein kleines Formular, mit dem der Benutzer die Ausstattung eines Fahrzeugs eingeben können soll. Möglichkeiten, dies in der Benutzeroberfläche darzustellen, gibt es genug:

Oft eingesetzt, aber schon vom Datenmodellentwurf her völlig falsch ist die Variante, die einzelnen Eigenschaften als Felder des Fahrzeug-Datensatzes zu speichern und im Formular passende Ja/Nein-Felder anzuzeigen. Eine Aufteilung der Objekte Fahrzeug und Ausstattungsmerkmal auf zwei per m:n-Beziehung verknüpfte Tabellen ist zwingend erforderlich, um folgende Versionen zu realisieren:

  • Anzeige der zugeordneten Ausstattungsmerkmale in einem Unterformular, Auswahl der Eigenschaften per Kombinationsfeld (prinzipiell wie im Bestellungen/Bestelldetail-Formular der Nordwind-Datenbank)
  • Einsatz zweier Listenfelder, von denen das linke alle zugeordneten, das rechte alle nicht zugeordneten Elemente enthält; das Zuordnen erfolgt durch passende Pfeil-Schaltflächen oder Doppelklick auf den zu verschiebenden Eintrag.
  • Einsatz eines einzigen Listenfelds, in dem alle zugeordneten Elemente markiert sind.

Die ersten beiden Varianten sollten bekannt sein (falls nicht: Listenfelder von A-Z, Shortlink 87, und m:n-Beziehungen in Haupt- und Unterformular, Shortlink 452, helfen weiter), Letztere nicht unbedingt. Das liegt vor allem daran, dass es keine offensichtliche Möglichkeit gibt, einmal zugeordnete Datensätze beim nächsten Aufruf automatisch wieder im Listenfeld anzuzeigen.

Dies holt der vorliegende Beitrag nach und fügt Ihrem Repertoire an Darstellungsmöglichkeiten von m:n-Beziehungen eine weitere Alternative hinzu. Eines vorweg: Diese Variante ist nicht unbedingt für riesige Datenmengen geeignet. Das ergibt sich nicht nur aus der Tatsache, dass die Einträge möglichst ohne viel Scrollen sichtbar sein sollen, sondern auch aus der Art der Wiederherstellung der Anzeige – dazu jedoch später mehr.

Beispieltabellen

Als Beispiel dient oben genannte Fahrzeug-Ausstattungsmerkmal-Beziehung, die sich wie in Bild 1 darstellt und auf drei Tabellen aufteilt.

pic001.tif

Bild 1: Datenmodell der Beispieldatenbank

Die Anzeige erfolgt in einem Formular namens frmFahrzeuge, dessen Eigenschaft Datenherkunft die Tabelle tblFahrzeuge als Wert aufweist. Für dieses Beispiel reicht die Anzeige der beiden Felder FahrzeugID und Fahrzeug völlig aus.

Viel interessanter ist das Listenfeld mit den Ausstattungsmerkmalen: Zunächst statten Sie es einmal mit der Tabelle tblAusstattungen als Datensatzherkunft aus – mehr brauchen Sie nicht. Das Listenfeld soll das Feld AusstattungID als gebundene Spalte verwenden und den Inhalt des Feldes Ausstattung anzeigen. Dazu stellen Sie die Eigenschaften Spaltenanzahl und Spaltenbreiten auf 2 beziehungsweise 0cm ein.

Mehrfachauswahl

Der Benutzer soll mehrere Einträge des Listenfeldes auswählen können, also stellen Sie die Eigenschaft Mehrfachauswahl auf Einzeln ein. Der Unterschied zur Einstellung Erweitert ist der, dass sich mit Einzeln die Einträge ganz einfach durch einen Klick aus- und abwählen lassen.

Die Einstellung Erweitert hingegen erfordert das Drücken der Umschalt- oder der Steuerungstaste, um mit der Maus mehrere Einträge zu markieren. Dafür können Sie so aber auch mehrere Einträge gleichzeitig auswählen (Umschalt-Taste drücken, ersten Eintrag auswählen, zweiten Eintrag auswählen führt zur Markierung der gewählten und aller dazwischen liegenden Einträge).

Im vorliegenden Beispiel, das mit einer überschaubaren Menge von Einträgen aufwartet, scheint die Einstellung Einzeln für die Eigenschaft Mehrfachauswahl sinnvoller.

Damit können Sie die Mehrfachauswahl nun schon ausprobieren – mehr aber auch nicht: Nach dem Wechseln zum nächsten und zum Zurückspringen auf den aktuellen Datensatz empfängt Sie das Listenfeld wieder ohne ausgewählte Einträge.

Es fehlen nun also noch zwei wichtige Schritte: Im ersten werden markierte Einträge in der Tabelle tblFahrzeugeAusstattungen gespeichert (und für deaktivierte wieder entfernt) und im zweiten die vorhandenen Einträge der Tabelle tblFahrzeugeAusstattungen ausgelesen und in Form markierter Einträge im Listenfeld mit den Ausstattungen dargestellt.

Markierung von Listenfeldelementen
speichern

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

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar