Windowsフォームアプリケーションでリストボックスの内容をフィルタリングすることは可能ですか?
私のリストボックスのデータソースは、次の場所に多数のDTOを含むBindingSourceです。
IList<DisplayDTO>
ListBoxのDisplayMemberで指定されているDTOプロパティでフィルタリングしたいと思います。
フィルタリングされるテキストは、別のテキストボックスで提供されます。
Windowsフォームアプリケーションでリストボックスの内容をフィルタリングすることは可能ですか?
私のリストボックスのデータソースは、次の場所に多数のDTOを含むBindingSourceです。
IList<DisplayDTO>
ListBoxのDisplayMemberで指定されているDTOプロパティでフィルタリングしたいと思います。
フィルタリングされるテキストは、別のテキストボックスで提供されます。
これはうまくいくはずです:
private void textBox_TextChanged(object sender, EventArgs e)
{
bindingSource.Filter = string.Format("[{0}] LIKE '%{1}%'",
listBox.DisplayMember,
textBox.Text.Replace("'", "''"));
}
編集:これは、基になるデータソース(bindingSource.DataSource
)がを実装している場合にのみ機能しIBindingListView
ます。FCLでは、DataView
クラスのみがこのインターフェイスを実装します。
から継承することにより、独自の実装を作成できますBindingList<T>
。フィルタ機能を追加する方法を説明する記事があります。SortableBindingList
また、Googleでのさまざまな実装を見つけることができます。