Filtering Listboxen in einer Windows Forms-Anwendung
-
07-07-2019 - |
Frage
Ist es möglich, den Inhalt einer Listbox in einer Windows Forms-Anwendung zu filtern?
Die Datasource meiner ListBox ist ein Binding ein Bündel von DTOs in einem enthalten:
IList<DisplayDTO>
Ich möchte auf der DTO Eigenschaft filtern, die in der List-Box des Display angegeben ist.
Der Text auf gefiltert wird in einem separaten Textfeld zur Verfügung gestellt.
Lösung
Dies sollte funktionieren:
private void textBox_TextChanged(object sender, EventArgs e)
{
bindingSource.Filter = string.Format("[{0}] LIKE '%{1}%'",
listBox.DisplayMember,
textBox.Text.Replace("'", "''"));
}
EDIT: Dies funktioniert nur, wenn die zugrunde liegende Datenquelle (bindingSource.DataSource
) implementiert IBindingListView
. In der FCL, implementiert nur die DataView
Klasse diese Schnittstelle.
Sie können Ihre eigene Implementierung durch Erben von BindingList<T>
erstellen. Hier einen Artikel die erklärt, wie die Filterfunktionalität hinzuzufügen. Sie können auch verschiedene Implementierungen von SortableBindingList
auf Google finden.