2009-09-14 67 views
0

是否可以过滤Windows窗体应用程序中的列表框内容?在Windows窗体应用程序中过滤列表框

我的ListBox的数据源是包含了一堆的DTO的一个一个的BindingSource:

IList<DisplayDTO> 

我想对在ListBox的DisplayMember指定的DTO属性筛选。

要过滤的文本在单独的文本框中提供。

回答

3

这应该工作:

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>来创建自己的实现。这里的an article解释了如何添加过滤器功能。您还可以在Google上找到SortableBindingList的各种实施。

+0

我试过你的建议,有一些变化,但仍然无法让它工作。我读过它可能与BindingSource中使用的容器有关。 将其更改为BindingList没有任何帮助。 – 2009-09-14 23:00:38

+0

不幸的是,.NET框架提供的'BindingList '实现不支持排序和过滤......下面是一篇文章,介绍如何添加过滤器功能:http://www.nablasoft.com/alkampfer/index。 PHP/2008/11 /第22 /延伸-的BindingList与 - 过滤器的功能/。 – 2009-09-14 23:11:12

+0

啊,欢呼队友:) – 2009-09-15 00:26:35