Filter BindingSource when DataSource is a BindingList

为君一笑 提交于 2019-11-30 09:25:06

问题


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

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();

But the DataGridView don't change. I missed something?


回答1:


You can not use Filter property to filter a BindingSource which it's DataSource is set to a BindingList<T>.

Only underlying lists that implement the IBindingListView interface support filtering.

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.




回答2:


You may try it:

    bd.resetBindings(false)

Good luck

UPDATE

I would try something like this:

    bd.Filter = string.Format("TAG_FAZENDA like '%{0}%'", cbTagFaz.Text);
    gvFiltro.resetbindings(false)
    gvFiltro.Update();

    bindNav.resetbindings(false)
    bindNav.Update();

Just this.



来源:https://stackoverflow.com/questions/35560365/filter-bindingsource-when-datasource-is-a-bindinglist

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!