在C#中过滤绑定源

时间:2011-05-09 11:36:48

标签: c#

我的代码就像这样

BindingSource bs=new BindingSource();
List<Items> lstItems= ListItems();

bs.DataSource=lstItems;

我将这个bindingsouce绑定到gridview。

grd.DaataSource=bs;

然后我将这个原始的BindingSource复制到一个单独的BindngSource

BindingSource filterBs=new BindingSource();

然后我对Bindingsource使用过滤条件

filterBs.Filter= "ItemCode='1' and cost>'200'";

grd.DataSource=null;

将网格的数据绑定到过滤的绑定源。

grd.DataSource=filterBs;

但现在它也会显示网格中的所有记录。

3 个答案:

答案 0 :(得分:2)

  

然后我复制这份原件   BindingSource到一个单独的   BindngSource

BindingSource filterBs=new BindingSource();

你没有复制它,你正在创建一个新的BindingSource。

要复制它,您可以执行以下操作:

BindingSource filterBs = grd.DataSource;

答案 1 :(得分:2)

Binding Source依赖于底层数据源来提供过滤和排序功能。 List<>不支持过滤,因此您的BindingSource不支持过滤。您可以在bs.SupportsFiltering分配后立即查看调试器中的bs.DataSource=lstItems;值来确认这是否是您的问题。

BindingSource.SupportsFiltering Property

  

如果列表不是IBindingListView,则SupportsFiltering始终返回false。

我所知道的唯一一个实现IBindingListView的课程是DataView

答案 2 :(得分:1)

你可能会遇到使用带有BindingSource的List并尝试过滤的其他问题,所以我建议使用这个SO线程DataBinding of DataGridView and List<> with BindingSource