当DataSource是BindingList时过滤BindingSource

时间:2016-02-22 17:45:27

标签: c# .net winforms datagridview bindingsource

我已从excel表中读取并为BindingList写了这个,在Form_Load中将其设置为DataSource作为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没有改变。我错过了什么?

2 个答案:

答案 0 :(得分:3)

您无法使用Filter属性过滤BindingSource DataSource设置为BindingList<T>

  

仅实现IBindingListView接口的基础列表   支持过滤。

您可以使用Linq:

过滤BindingList<T>
var filteredBindingList= new BindingList<T>(bindingList.Where(x=>some criteria).ToList());

然后您可以使用过滤的绑定列表作为数据源。

答案 1 :(得分:0)

您可以尝试一下:

    bd.resetBindings(false)
祝你好运

<强>更新

我会尝试这样的事情:

    bd.Filter = string.Format("TAG_FAZENDA like '%{0}%'", cbTagFaz.Text);
    gvFiltro.resetbindings(false)
    gvFiltro.Update();

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

就是这个。