Datensätze als zweizeilige Liste anzeigen
Zeigen Sie eine kurze Liste von Datensätzen so an, wie es Outlook und Teams tun – ein fetter Titel, eine graue Detailzeile, ein farbiger Status und eine Schaltfläche je Eintrag, keine Spaltenüberschriften –, zum Beispiel die offenen Sitzungen auf einem Dashboard, mit Beenden nur dort, wo sich eine Sitzung beenden lässt.
Voraussetzungen: WKL Forms Object Library 1.36 oder höher.
Lösungsüberblick
- Eine Ansicht von
WklGrid. Setzen SieViewModeaufwgvListund beschreiben Sie einen Eintrag inItemTemplate. Datenherkunft, Servermodus, Auswahl,LinkMasterFieldseines Unterformulars daneben,BeforeDeleteundDeleteSelectedbleiben die des Rasters. Ein Endlosformular kann das nicht: Es enthält nur eine einzige Instanz eines ActiveX-Steuerelements. - Die Vorlage nennt Felder:
title(wahlweise als Link), bis zu zweilinesmit Access-Formaten, einestatus-Pille mit ihrem Feld für die Art, einbadge, einglyphund bis zu zweicommands, deren Sichtbarkeit und Aktivierung aus Feldern des Datensatzes stammen. - Ereignisse:
ItemClickfür den Eintrag,LinkClickfür den Link,ItemCommandfür eine Schaltfläche. Das Raster reagiert auf keines davon von selbst.RowSelectmeldet wie in der Tabelle, dass der Benutzer einen anderen Eintrag gewählt hat (Tasten oder Klick), nicht, dass CodeSelectedKeygesetzt hat. Die Tabelle aller Ereignisse der Listenansicht steht in den Hinweisen zuViewModein der API-Referenz.
Umsetzung
Die Tabelle des Beispiels, einmalig angelegt (führen Sie die Prozedur im Direktbereich aus):
Public Sub CreateListSample()
With CurrentDb
.Execute "CREATE TABLE tblSitzung (ID LONG CONSTRAINT PK_Sitzung PRIMARY KEY, Person TEXT(50), " & _
"Methode TEXT(20), Herkunft TEXT(30), LaeuftAb DATETIME, Zustand TEXT(20), ZustandArt TEXT(10), KannBeenden YESNO)"
.Execute "INSERT INTO tblSitzung VALUES (1, 'Erika Muster', 'Windows', '10.0.4.21', #2026-10-07 18:02:00#, 'läuft', 'ok', True)"
.Execute "INSERT INTO tblSitzung VALUES (2, 'Max Mustermann', 'Kennwort', Null, #2026-10-07 19:30:00#, 'abgelaufen', 'warn', False)"
End With
End Sub
Ein Formular frmStart enthält ein WklGrid namens grdSitzungen. Die Einstellungen werden meist einmalig auf der
Designerseite Liste vorgenommen (Eigenschaftenblatt, Zeile Benutzerdefiniert [...]); hier per Code:
Option Compare Database
Option Explicit
Private Sub Form_Load()
With Me!grdSitzungen.Object
.RecordSource = "tblSitzung"
.KeyField = "ID"
.ItemTemplate = "{""title"":{""field"":""Person"",""link"":true}," & _
"""lines"":[[{""field"":""Methode""},{""field"":""Herkunft""},{""field"":""LaeuftAb"",""format"":""hh:nn""}]]," & _
"""status"":{""field"":""Zustand"",""kindField"":""ZustandArt""}," & _
"""commands"":[{""key"":""beenden"",""caption"":""Beenden"",""visibleField"":""KannBeenden""}]}"
.EmptyText = "Keine offene Sitzung."
.AllowDeletions = True
.ViewMode = wgvList
End With
End Sub
Private Sub grdSitzungen_LinkClick(ByVal Key As Variant, ByVal Field As String)
DoCmd.OpenForm "frmPerson", WhereCondition:="SitzungID = " & Key
End Sub
Private Sub grdSitzungen_ItemCommand(ByVal Key As Variant, ByVal Command As String)
If Command = "beenden" Then Me!grdSitzungen.Object.DeleteSelected
End Sub
Private Sub grdSitzungen_BeforeDelete(ByVal Key As Variant, ByVal Count As Long, Cancel As Integer, Confirm As Boolean)
Confirm = False
Cancel = (MsgBox("Sitzung beenden?", vbYesNo + vbQuestion) = vbNo)
End Sub
Die Liste zeigt „Erika Muster“ halbfett mit „Windows · 10.0.4.21 · 18:02“ darunter, ein grünes „läuft“ und
Beenden. „Max Mustermann“ hat keine Adresse (der leere Wert und sein Trennzeichen entfallen) und keine
Schaltfläche, weil KannBeenden False ist.
Hinweise
- Ein Null-Wert in einer Detailzeile entfällt samt Trennzeichen. Die Formate sind die von Access-Spalten und folgen den Regionaleinstellungen von Windows. Relative Zeitangaben („vor 5 Min.“) sind nicht eingebaut: Berechnen Sie sie in der Abfrage.
Requerybehält den ausgewählten Datensatz (SelectedKey) bei. Rufen Sie es über einen Zeitgeber auf, um eine Liste wie die der offenen Sitzungen zu aktualisieren.- Ein Eintrag ist so hoch wie sein Text, sofern
ItemHeightnicht gesetzt ist. Text, der nicht passt, endet mit „…“ und erscheint vollständig in seiner QuickInfo. - Tastatur: Die Tabulatortaste führt vom Eintrag in seine Schaltflächen und weiter zum nächsten Steuerelement. Sprachausgaben lesen jeden Eintrag als einen Satz vor, den Link und die Schaltflächen als eigene Elemente.
DeleteSelectedinItemCommandläuft unmittelbar nach dem Ende der Prozedur, sodassBeforeDeleteoben das Formular erreicht (VBA liefert kein Ereignis des Rasters aus, während eine seiner Ereignisprozeduren läuft). Code nachDeleteSelectedinItemCommandsieht den Datensatz noch; zeigen Sie eine Benachrichtigung wie „Sitzung beendet“ mitWklToastinAfterDeletean.- Die Liste zeichnet keine Spalten. Um nach einem Feld zu sortieren, das die Einträge nicht zeigen, fügen Sie per Code eine ausgeblendete Spalte hinzu:
Set c = .Columns.Add("Nr"),c.Visible = False,c.SortDirection = wsdAscending. - Nebeneinanderliegende Kacheln (Karten) gehören nicht zur Listenansicht.