当数据源是绑定列表时,筛选绑定源

本文关键字:绑定 筛选 列表 数据源 | 更新日期: 2023-09-27 18:35:39

我已经从 excel 表中读取并编写了这个BindingListForm_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();

就这个。