当 DataSource 是 BindingList 时过滤 BindingSource
Filter BindingSource when DataSource is a BindingList
我已经从 excel sheet 中读取并为 BindingList 编写了这个,在 Form_Load 中它被设置为数据源作为 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.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 没有改变。我错过了什么?
你可以试试:
bd.resetBindings(false)
祝你好运
更新
我会尝试这样的事情:
bd.Filter = string.Format("TAG_FAZENDA like '%{0}%'", cbTagFaz.Text);
gvFiltro.resetbindings(false)
gvFiltro.Update();
bindNav.resetbindings(false)
bindNav.Update();
就是这个。
您不能使用 Filter
属性 来过滤 BindingSource
,它 DataSource
设置为 BindingList<T>
。
Only underlying lists that implement the IBindingListView
interface
support filtering.
您可以使用 Linq 过滤 BindingList<T>
:
var filteredBindingList= new BindingList<T>(bindingList.Where(x=>some criteria).ToList());
然后就可以使用过滤后的绑定列表作为数据源了。
我已经从 excel sheet 中读取并为 BindingList 编写了这个,在 Form_Load 中它被设置为数据源作为 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.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 没有改变。我错过了什么?
你可以试试:
bd.resetBindings(false)
祝你好运
更新
我会尝试这样的事情:
bd.Filter = string.Format("TAG_FAZENDA like '%{0}%'", cbTagFaz.Text);
gvFiltro.resetbindings(false)
gvFiltro.Update();
bindNav.resetbindings(false)
bindNav.Update();
就是这个。
您不能使用 Filter
属性 来过滤 BindingSource
,它 DataSource
设置为 BindingList<T>
。
Only underlying lists that implement the
IBindingListView
interface support filtering.
您可以使用 Linq 过滤 BindingList<T>
:
var filteredBindingList= new BindingList<T>(bindingList.Where(x=>some criteria).ToList());
然后就可以使用过滤后的绑定列表作为数据源了。