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
WklKpiCardmit einemKeylöstClick(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.
RemoveFilterChiplöstFilterChipRemovedmitByUser = Falseaus,ClearFilterChipslöst nichts aus. Filterbleibt 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
RecordSourcevoraus. Ein Raster, das nur an einRecordsetgebunden 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 = Falseblendet 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