Color scheme: Dark
You are here: start » de » Dokumentation » Werkzeuge für Microsoft Access » WKL Forms Object Library » how-to » Datensätze als zweizeilige Liste anzeigen

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 Sie ViewMode auf wgvList und beschreiben Sie einen Eintrag in ItemTemplate. Datenherkunft, Servermodus, Auswahl, LinkMasterFields eines Unterformulars daneben, BeforeDelete und DeleteSelected bleiben 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 zwei lines mit Access-Formaten, eine status-Pille mit ihrem Feld für die Art, ein badge, ein glyph und bis zu zwei commands, deren Sichtbarkeit und Aktivierung aus Feldern des Datensatzes stammen.
  • Ereignisse: ItemClick für den Eintrag, LinkClick für den Link, ItemCommand für eine Schaltfläche. Das Raster reagiert auf keines davon von selbst. RowSelect meldet wie in der Tabelle, dass der Benutzer einen anderen Eintrag gewählt hat (Tasten oder Klick), nicht, dass Code SelectedKey gesetzt hat. Die Tabelle aller Ereignisse der Listenansicht steht in den Hinweisen zu ViewMode in 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.
  • Requery behä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 ItemHeight nicht 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.
  • DeleteSelected in ItemCommand läuft unmittelbar nach dem Ende der Prozedur, sodass BeforeDelete oben das Formular erreicht (VBA liefert kein Ereignis des Rasters aus, während eine seiner Ereignisprozeduren läuft). Code nach DeleteSelected in ItemCommand sieht den Datensatz noch; zeigen Sie eine Benachrichtigung wie „Sitzung beendet“ mit WklToast in AfterDelete an.
  • 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.

Verwandte Themen

de/wiki/msaccess/comctl/how-to/show-records-as-a-list.txt · Last modified: by Wolfgang van der Stille