Reputation: 125
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 works fine!
I intend to create a combobox as a filter for this DataGridView
gvFiltro, so in the 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
doesn't change. did I miss something?
Upvotes: 4
Views: 13793
Reputation: 125312
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.
Upvotes: 6
Reputation: 1892
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.
Upvotes: 0