当数据源是绑定列表时,筛选绑定源
本文关键字:绑定 筛选 列表 数据源 | 更新日期: 2023-09-27 18:35:39
我已经从 excel 表中读取并编写了这个BindingList
,Form_Load()
将其设置为作为绑定源的数据源:
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
不会改变。 我错过了什么吗?
不能使用Filter
属性来过滤DataSource
设置为BindingList<T>
的BindingSource
。
仅实现
IBindingListView
接口的基础列表 支持过滤。
可以使用 Linq 筛选BindingList<T>
:
var filteredBindingList= new BindingList<T>(bindingList.Where(x=>some criteria).ToList());
然后,可以使用筛选的绑定列表作为数据源。
你可以试试:
bd.resetBindings(false)
祝你好运
更新
我会尝试这样的事情:
bd.Filter = string.Format("TAG_FAZENDA like '%{0}%'", cbTagFaz.Text);
gvFiltro.resetbindings(false)
gvFiltro.Update();
bindNav.resetbindings(false)
bindNav.Update();
就这个。