Spalten einer Strukturliste filtern
Lassen Sie Benutzer die Knoten einer Strukturliste mit Bedingungen für einzelne Spalten eingrenzen – in eine Filterzeile getippt oder aus der Werteliste im Spaltenkopf gewählt –, und setzen Sie dieselben Bedingungen aus VBA. Ein passender Knoten bleibt an seiner Stelle in der Struktur.
Voraussetzungen: WKL Forms Object Library 1.64 oder höher.
Lösungsüberblick
ShowFilterRow zeigt unter den Spaltenköpfen eine Zeile mit einer Bedingung je Spalte.
AllowColumnFilter ergänzt jeden Spaltenkopf um einen Trichter, der die Werteliste der Spalte
öffnet, und das Kontextmenü des Spaltenkopfs um die Filterbefehle. ShowFilterBar zeigt die aktiven
Bedingungen unterhalb der Datensätze mit einem Schalter und „Filter löschen“. FilterIncludesChildren
legt fest, ob ein passender Knoten seine untergeordneten Knoten mitbringt. Im Designer stehen diese
vier Einstellungen im Abschnitt Filter der Seite Gitter, Gruppierung und Export.
Aus VBA setzen ColumnFilter und ColumnFilterValues die Bedingungen, ColumnFilterEnabled setzt
sie aus, und ClearColumnFilters entfernt sie. Eigenschaften, Methoden und Ereignisse heißen wie in
WklGrid.
Umsetzung
Private Sub Form_Load()
With Me!List1.Object
.ShowFilterRow = True
.AllowColumnFilter = True
.ColumnFilter("Datenbank") = "BikeBuilder" ' begins with
.ColumnFilterValues("Ergebnis") = Array("abgewiesen")
Debug.Print .ColumnFilterText
End With
End Sub
Private Sub List1_BeforeColumnFilter(ByVal Column As String, ByVal Text As String, Cancel As Integer)
If Column = "Datenbank" And Text = "" Then Cancel = True ' keep this condition
End Sub
Bedingungen der Filterzeile: Text allein wählt Werte, die damit beginnen (Bike); ein Muster mit *
oder ? (*Builder); eine Zahl oder ein Datum allein wählt gleiche Werte (100); ein Vergleich
(>= 100, <> abgewiesen); leer oder nicht leer. Zahlen und Datumsangaben werden im Format der
Regionaleinstellungen von Windows gelesen, ohne Tausendertrennzeichen.
Hinweise
- Ein Knoten, der alle Bedingungen erfüllt, bleibt mit seinen übergeordneten Knoten sichtbar; diese werden aufgeklappt, damit der Knoten an seiner Stelle zu sehen ist. Alle anderen Knoten sind ausgeblendet. Mit
FilterIncludesChildrenerscheinen auch die untergeordneten Knoten eines Treffers, auch die, die erst beim Aufklappen geladen werden. - Der Spaltenfilter gilt zusätzlich zu
Filter. „Nur Treffer“ in der Suchleiste zeigt die Treffer unter den Knoten, die der Spaltenfilter übrig lässt. - Eine Liste mit verzögertem Laden (
LazyLoad) gibt die Bedingungen als Teil einer Abfrage an die Datenherkunft weiter und findet so auch Knoten, die noch nicht geladen sind. Bei mehr als 1.000 Treffern lädt sie die ganze Struktur einmal. Eine Liste, die alle Datensätze hält (LazyLoadaus,GroupFields, Recordset oder Datei), vergleicht die geladenen Werte. - Gruppenknoten von
GroupFieldshaben keine Feldwerte. Sie bleiben als übergeordnete Knoten von Treffern sichtbar. - Eine Bedingung, die nicht zum Spaltentyp passt, wird während der Eingabe rot angezeigt und filtert nicht; aus VBA löst sie
wkeInvalidValueaus. Weist die Datenherkunft eine Bedingung zurück, bleibt der Filter, wie er war: Der Benutzer erhält die Fehlermeldung, VBA den FehlerwkeSourceError. BeforeColumnFilterundAfterColumnFiltermelden die Änderungen des Benutzers in der Filterzeile, der Werteliste, dem Kontextmenü des Spaltenkopfs und der Filterleiste, nicht die aus VBA.- Mit
AutoSaveLayoutmerkt sich die Liste die Bedingungen je Windows-Benutzer.Resetentfernt sie. WklGantterbt den Spaltenfilter: Die Zeitleiste zeigt dieselben Vorgänge wie die Liste.
Verwandte Themen
- Knoten suchen und filtern (Suchleiste und
Filter) - Spalten eines Rasters filtern (derselbe Filter in
WklGrid)