Farbschema: Dunkel
Sie befinden sich hier: start » de » Dokumentation » Werkzeuge für Microsoft Access » WKL Forms Object Library » how-to » Spalten einer Strukturliste filtern

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 FilterIncludesChildren erscheinen 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 (LazyLoad aus, GroupFields, Recordset oder Datei), vergleicht die geladenen Werte.
  • Gruppenknoten von GroupFields haben 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 wkeInvalidValue aus. Weist die Datenherkunft eine Bedingung zurück, bleibt der Filter, wie er war: Der Benutzer erhält die Fehlermeldung, VBA den Fehler wkeSourceError.
  • BeforeColumnFilter und AfterColumnFilter melden die Änderungen des Benutzers in der Filterzeile, der Werteliste, dem Kontextmenü des Spaltenkopfs und der Filterleiste, nicht die aus VBA.
  • Mit AutoSaveLayout merkt sich die Liste die Bedingungen je Windows-Benutzer. Reset entfernt sie.
  • WklGantt erbt den Spaltenfilter: Die Zeitleiste zeigt dieselben Vorgänge wie die Liste.

Verwandte Themen

de/wiki/msaccess/comctl/how-to/filter-tree-list-columns.txt · Zuletzt geändert: von Wolfgang van der Stille