当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设置为BindingListBindingSource

只有实现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(); 

只是这个。