我的代码就像这样
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;
但现在它也会显示网格中的所有记录。
答案 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。