Zugriff auf Daten im ListView-Steuerelement

Genau wie beim Listenfeld oder auch in einem Datenblatt gibt es Möglichkeiten, Einträge anzuklicken, den markierten Eintrag auszuwerten oder auch per Code bestimmte Einträge zu markieren. Wie dies gelingt, zeigt dieser Artikel.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1208_ListView_Zugriff.mdb.

Eigenschaften zur Markierung

Zunächst schauen wir uns die Eigenschaft FullRowSelect an. Mit dieser legen Sie fest, auf welchen Bereich der Benutzer klicken muss, um einen Eintrag zu markieren und wie der markierte Eintrag hervorgehoben wird.

Im Beispiel im Formular frmListViewMarkieren können Sie diese Eigenschaft mit der Umschaltfläche tglKompletteZeile ein- und ausschalten. Das Formular basiert auf dem Formular frmListViewMitDatenAusTabelle, das Listenfeld wird wie im Artikel ListView-Steuerelement mit Daten füllen mit den Daten der Tabelle tblPersonal gefüllt.

über dem List-View-Steuerelement haben wir eine Umschaltfläche platziert, welche die Eigenschaft FullRowSelect des ListView-Steuerelements abwechselnd auf die Werte True und False einstellt.

Damit dies geschieht, legen Sie für die Umschaltfläche mit dem Namen tblKompletteZeile eine Ereignisprozedur an, die durch das Ereignis Nach Aktualisierung ausgelöst wird (Markieren der Eigenschaft, Auswahl von [Ereignisprozedur], Klick auf die Schaltfläche mit den drei Punkten). Diese Prozedur füllen Sie wie folgt:

Private Sub tglKompletteZeile_AfterUpdate()
     Select Case Me!tglKompletteZeile
         Case -1
             objLvwPersonal.FullRowSelect = True
         Case 0
             objLvwPersonal.FullRowSelect = False
     End Select
End Sub

Beim Laden des Formulars wird die Eigenschaft FullRowSelect auf den Wert False eingestellt, was die folgende Zeile in der Prozedur Form_Load bewirkt:

Private Sub Form_Load()
     Set objLvwPersonal = Me!lvwPersonal.Object
     With objLvwPersonal
              ...
         .FullRowSelect = False
         ...
End Sub

Dies sorgt außerdem dafür, dass nur ein Klick auf den Text in der ersten Spalte des ListView-Steuerelements den gewünschten Eintrag markiert – und hier auch nur den Inhalt der ersten Spalte (siehe Bild 1).

Einstellen der Spalten im ListView-Steuerelement

Bild 1: Einstellen der Spalten im ListView-Steuerelement

Die übrigen hier nicht abgebildeten Anweisungen finden Sie im Klassenmodul Form_frmListViewMarkieren der Beispieldatenbank, die Erläuterung dazu im Artikel ListView-Steuerelement mit Daten füllen.

Da die Umschaltfläche beim öffnen des Formulars standardmäßig den Wert Null enthält, ändert ein erster Klick den Wert auf -1, also True. Dies löst die Ereignisprozedur tblKompletteZeile_AfterUpdate aus und stellt die Eigenschaft FullRowSelect ebenfalls auf True ein. Ein weiterer Klick stellt die Eigenschaft wieder auf False ein. Wenn FullRowSelect den Wert True enthält, kann der Benutzer den Eintrag an einer beliebigen Stelle anklicken. Dies markiert dann auch die komplette Zeile (siehe Bild 2).

Markieren der kompletten Zeile im ListView

Bild 2: Markieren der kompletten Zeile im ListView

Den markierten Datensatz ermitteln

Wenn der Benutzer einen Datensatz markiert, dann zum Durchführen einer bestimmten Aktion: Vielleicht möchte er die Detailansicht aufrufen, den Datensatz löschen oder etwas anderes damit erledigen. In jedem Fall benötigen wir dann einen eindeutigen Hinweis auf diesen Datensatz – in der Regel den Wert des Primärschlüsselfeldes für diesen Eintrag.

Diesen haben wir beispielsweise in der ersten Spalte des ListView-Steuerelements abgebildet, aber er befindet sich auch in der Key-Eigenschaft eines jeden Eintrags. Wir schauen uns erst an, wie Sie den Wert der ersten Spalte ermitteln und kümmern uns dann um die Key-Eigenschaft. Letztere wird vermutlich öfter eingesetzt, da es nicht immer gewünscht ist, die Werte der Primärschlüsselfelder anzuzeigen.

Führen wir die ersten Versuche über das Direktfenster aus (Tastenkombination Strg + G) – bei in der Formularansicht geöffnetem Formular frmListViewMarkieren und markiertem Datensatz. Dann referenzieren Sie das ListView-Steuerelement wie folgt – hier zur Ausgabe des Namens zur Prüfung, ob der Bezug stimmt:

  Forms!frmListViewMarkieren!lvwPersonal.Name
    lvwPersonal

Dies gelingt bereits. übrigens ist es eine gute Idee, sich zum Ermitteln von Bezügen auf Steuerelemente oder Eigenschaften in einem Formular Schritt für Schritt vorzuarbeiten. Auf diese Weise können Sie potenzielle Fehlerquellen nacheinander eliminieren.

Wenn wir uns dann weiter vorarbeiten, verwenden wir die Eigenschaft SelectedItem, um auf den gewünschten Eintrag zuzugreifen. Dies liefert in folgendem Beispiel den Wert 3:

  Forms!frmListViewMarkieren!lvwPersonal.SelectedItem
    3

Nun stellt sich nur noch die Frage: Liefert dies den Wert der ersten Spalte oder den Index der markierten Spalte Leider sind beide Werte gleich, sodass wir dies aktuell nicht ermitteln können.

Wie finden wir also heraus, ob die Eigenschaft den Index oder den Wert der ersten Spalte liefert Ganz einfach: Wir fügen die Daten der Datenherkunft so hinzu, dass diese in der umgekehrten Reihenfolge angezeigt werden. Dazu brauchen Sie nur den ersten Parameter der Add-Anweisung in der Prozedur ListViewFuellen im Klassenmodul Form_frmListViewMarkieren auf 1 einstellen:

Set objListitem = objLvwPersonal.ListItems.Add(1, "p" & rst!PersonalID, rst!PersonalID)

Der neueste Eintrag wird dann jeweils an der ersten Position eingefügt, sodass die Datensätze wie in Bild 3 hinzugefügt werden. Eine erneute Abfrage liefert dann Gewissheit, dass SelectedItem den Wert des ersten Feldes zurückgibt. Aber ist das die ganze Wahrheit Nein. Dies finden Sie heraus, wenn Sie einmal mit SelectedItem den aktuellen Wert abfragen möchten, wenn gar kein Eintrag markiert ist. Dies liefert die Fehlermeldung aus Bild 4.

Datensätze in umgekehrter Reihenfolge

Bild 3: Datensätze in umgekehrter Reihenfolge

Fehler beim Zugriff auf SelectedItem, wenn kein Datensatz markiert ist

Bild 4: Fehler beim Zugriff auf SelectedItem, wenn kein Datensatz markiert ist

Wenn SelectedItem den Typ Variant, String oder einen Zahlendatentyp hätte, würde dies nicht passieren. Zum Glück können wir den Typ des von Selected-Item gelieferten Wertes mit der Funktion TypeName ermitteln – zumindest, wenn ein Eintrag markiert ist:

  Typename(Forms!frmListViewMarkieren!                           lvwPersonal.SelectedItem)
    IListItem

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:

Schreibe einen Kommentar