使用BindingSource从BindingList更新和刷新DataGridView [英] Update and Refresh DataGridView with BindingSource from BindingList

查看:1103
本文介绍了使用BindingSource从BindingList更新和刷新DataGridView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经从excel表中读取了一个BindingList,在Form_Load中设置为一个DataSource作为BindingSource:

  bd = new BindingSource(); // BindingSource的实例
bd.DataSource = ExcelOPS.LerExcel(); // LerExcel()方法返回一个BindingList< T>

gvFiltro.DataSource = bd; //设置一个名为gvFiltro的DataGridView DataSource属性
bindNav.BindingSource = bd; //设置一个BindingNavigator源

这个工作很好!
我打算创建一个组合框作为此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不会更改。我错过了什么?

解决方案

您不能使用 过滤器 属性进行过滤一个 BindingSource 它的 DataSource 设置为一个 BindingList< T>


只有实现 IBindingListView 接口的底层列表
支持过滤。


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

  var filteredBindingList = new BindingList< T>(bindingList.Where(x =>某些条件).ToList()); 

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


I have read from a excel sheet and wrote this for a BindingList, in Form_Load this is set to a DataSource as 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

This work fine! I intent to create a combobox as filter for this DataGridView gvFiltro, so in SelectedIndexChanged event of combobox, I try this:

        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();

But the DataGridView don't change. I missed something?

解决方案

You can not use Filter property to filter a BindingSource which it's DataSource is set to a BindingList<T>.

Only underlying lists that implement the IBindingListView interface support filtering.

You can filter the BindingList<T> using Linq:

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

Then you can use filtered binding list as data source.

这篇关于使用BindingSource从BindingList更新和刷新DataGridView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆