2011-05-09 55 views
1

我的代码是这样滤波在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; 

重新网格的datasouce结合过滤的BindingSource 。

grd.DataSource=filterBs; 

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

回答

2

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

BindingSource filterBs=new BindingSource(); 

你不是复制它,你要创建一个新的BindingSource。

要复制它,你反而会做类似如下:

BindingSource filterBs = grd.DataSource; 
+0

或者干脆 - > BindingSoure filterBs = BS;对? – 2011-05-09 11:59:19

+0

即便如此,您仍在将引用复制到旧的BindingSource,而不是创建一个看起来像旧的引用。 – 2013-08-30 13:31:29

2

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

BindingSource.SupportsFiltering Property

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

我所知道的是,只有类实现IBindingListViewDataView