Color scheme: Dark
You are here: start » de » Dokumentation » Werkzeuge für Microsoft Access » WKL Forms Object Library » how-to » Liste mit Filterchips eingrenzen

Liste mit Filterchips eingrenzen

Öffnen Sie eine Liste bereits für einen Zweck eingegrenzt – „Zertifikate, die innerhalb von 14 Tagen ablaufen“, erreicht über einen Klick auf eine Kennzahl der Startseite – und lassen Sie den Benutzer sehen, warum die Liste kürzer ist. Mit einem Klick hebt er diese Eingrenzung wieder auf.

Voraussetzungen: WKL Forms Object Library 1.45 oder höher.

Lösungsüberblick

  • Ein Filterchip ist eine benannte WHERE-Bedingung. WklGrid.AddFilterChip(Name, Caption, Condition) grenzt die Datensätze ein. Das Raster wendet (Filter) AND (chip 1) AND (chip 2) ... an, im Speicher ebenso wie im Servermodus.
  • Die Filterleiste zeigt ihn an. Unter den Datensätzen erscheint jeder Chip als Schaltfläche „Caption ✕“. Ein Klick, die Taste Entf auf der Schaltfläche oder Invoke durch eine Sprachausgabe entfernt den Chip, und die Datensätze werden neu gelesen.
  • Die Anwendung erfährt davon. FilterChipRemoved(Name, ByUser) meldet jedes Entfernen, sodass eine Überschrift oder eine Kennzahl nachziehen kann.
  • Die Startseite übergibt den Grund. Eine WklKpiCard mit einem Key löst Click(Key) aus. Die Anwendungsshell zeigt die Listenseite an und fügt den Chip hinzu, der zu dem Schlüssel gehört.

Umsetzung

Im Modul des Shell-Formulars frmShell (Karte kpiExpiring der Startseite mit Key = "expiring", Seitenunterformular sfPage):

Option Compare Database
Option Explicit
 
Private Sub kpiExpiring_Click(ByVal Key As String)
    Me!sfPage.SourceObject = "frmZertifikate"
    With Me!sfPage.Form!grdZertifikate.Object
        .ClearFilterChips
        Select Case Key
            Case "expiring"
                .AddFilterChip "expiring", "läuft in 14 Tagen ab", "Ablauf Between Date() And Date() + 14"
            Case "locked"
                .AddFilterChip "locked", "gesperrt", "Status = 'gesperrt'"
        End Select
    End With
End Sub

Im Modul des Seitenformulars frmCertificates:

Private Sub grdZertifikate_FilterChipRemoved(ByVal Name As String, ByVal ByUser As Boolean)
    If ByUser Then Me!lblHeading.Caption = "Alle Zertifikate"
End Sub

Hinweise

  • Ein Chip mit einem bereits vorhandenen Namen ersetzt den vorhandenen an dessen Stelle; die Leiste behält ihre Reihenfolge. RemoveFilterChip löst FilterChipRemoved mit ByUser = False aus, ClearFilterChips löst nichts aus.
  • Filter bleibt die eigene Bedingung der Anwendung und enthält die Chips nicht. Ein JPath-Filter ($...) lässt sich nicht mit Chips kombinieren und wird abgewiesen, solange Chips gesetzt sind.
  • Chips setzen eine RecordSource voraus. Ein Raster, das nur an ein Recordset gebunden ist (zum Beispiel auf einem UserForm), weist sie ab.
  • Chips werden weder mit dem Formular noch in der gespeicherten Spaltenanordnung gespeichert. Setzen Sie sie jedes Mal, wenn die Seite für einen bestimmten Zweck geöffnet wird.
  • „Filter löschen“ in der Leiste entfernt die Spaltenfilter des Benutzers, nicht die Chips.
  • ShowFilterBar = False blendet die Leiste aus. Die Chips wirken weiter, der Benutzer kann sie dann aber nicht entfernen.

Verwandte Themen

de/wiki/msaccess/comctl/how-to/narrow-a-list-with-filter-chips.txt · Last modified: by Wolfgang van der Stille