当DataSource是BindingList时过滤BindingSource
我从excel表中读取并为BindingList写了这个,在Form_Load中,这被设置为一个DataSource作为BindingSource:
bd = new BindingSource(); //instance of BindingSource bd.DataSource = ExcelOPS.LerExcel(); //LerExcel() method return a BindingList gvFiltro.DataSource = bd; //set a DataGridView named gvFiltro DataSource property bindNav.BindingSource = bd; //set a BindingNavigator source
这个工作很好! 我打算为这个DataGridView gvFiltro创建一个combobox作为filter,所以在combobox的SelectedIndexChanged事件中,我试试这个:
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不会改变。 我错过了什么?
您不能使用Filter
属性来过滤它的DataSource
设置为BindingList
的BindingSource
。
只有实现
IBindingListView
接口的基础列表才支持过滤。
您可以使用Linq过滤BindingList
:
var filteredBindingList= new BindingList(bindingList.Where(x=>some criteria).ToList());
然后,您可以使用筛选的绑定列表作为数据源。
你可以尝试一下:
bd.resetBindings(false)
祝好运
UPDATE
我会尝试这样的事情:
bd.Filter = string.Format("TAG_FAZENDA like '%{0}%'", cbTagFaz.Text); gvFiltro.resetbindings(false) gvFiltro.Update(); bindNav.resetbindings(false) bindNav.Update();
只是这个。