首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当BindingSource是BindingList时过滤BindingList

当BindingSource是BindingList时过滤BindingList
EN

Stack Overflow用户
提问于 2016-02-22 17:45:27
回答 2查看 10.5K关注 0票数 4

我从excel表中读取并为BindingList编写了以下内容,在Form_Load()中,它被设置为DataSource作为BindingSource:

代码语言:javascript
复制
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创建一个组合框作为过滤器,所以在combobox的SelectedIndexChanged事件中,我尝试如下:

代码语言:javascript
复制
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并没有改变。我错过了什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-22 19:53:20

不能使用Filter属性筛选其DataSource设置为BindingList<T>BindingSource

只有实现IBindingListView接口的底层列表支持筛选。

您可以使用Linq过滤BindingList<T>

代码语言:javascript
复制
var filteredBindingList= new BindingList<T>(bindingList.Where(x=>some criteria).ToList());

然后可以使用筛选绑定列表作为数据源。

票数 6
EN

Stack Overflow用户

发布于 2016-02-22 17:57:23

你可以试试:

代码语言:javascript
复制
    bd.resetBindings(false)

祝好运

更新

我会尝试这样的方法:

代码语言:javascript
复制
    bd.Filter = string.Format("TAG_FAZENDA like '%{0}%'", cbTagFaz.Text);
    gvFiltro.resetbindings(false)
    gvFiltro.Update();

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

就这个。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35560365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档