当 DataSource 是 BindingList 时过滤 BindingSource [英] Filter BindingSource when DataSource is a BindingList
问题描述
我从 excel 表中读取并为 BindingList 编写了此内容,在 Form_Load 中将其设置为 DataSource 作为 BindingSource:
I have read from a excel sheet and wrote this for a BindingList, in Form_Load this is set to a DataSource as BindingSource:
bd = new BindingSource(); //instance of BindingSource
bd.DataSource = ExcelOPS.LerExcel(); //LerExcel() method return a BindingList<T>
gvFiltro.DataSource = bd; //set a DataGridView named gvFiltro DataSource property
bindNav.BindingSource = bd; //set a BindingNavigator source
这项工作很好!我打算为此 DataGridView gvFiltro 创建一个组合框作为过滤器,因此在组合框的 SelectedIndexChanged 事件中,我尝试这样做:
This work fine! I intent to create a combobox as filter for this DataGridView gvFiltro, so in SelectedIndexChanged event of combobox, I try this:
this.gvFiltro.DataSource = null;
bd.Filter = string.Format("TAG_FAZENDA like '%{0}%'", cbTagFaz.Text);
gvFiltro.DataSource = bd;
gvFiltro.Update();
gvFiltro.Refresh();
bindNav.BindingSource = bd;
bindNav.Update();
bindNav.Refresh();
但是 DataGridView 不会改变.我错过了什么?
But the DataGridView don't change. I missed something?
推荐答案
您不能使用 Filter
属性来过滤 BindingSource
它是 DataSource
设置为 BindingList
.
You can not use Filter
property to filter a BindingSource
which it's DataSource
is set to a BindingList<T>
.
仅实现 IBindingListView
接口的底层列表支持过滤.
Only underlying lists that implement the
IBindingListView
interface support filtering.
您可以使用 Linq 过滤 BindingList
:
You can filter the BindingList<T>
using Linq:
var filteredBindingList= new BindingList<T>(bindingList.Where(x=>some criteria).ToList());
然后您可以使用过滤后的绑定列表作为数据源.
Then you can use filtered binding list as data source.
这篇关于当 DataSource 是 BindingList 时过滤 BindingSource的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!