注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天涯倦客的博客

祝福你朋友永远快乐!

 
 
 

日志

 
 

DataGridView 被数据绑定到支持更改通知并允许删除的 IBindingList  

2013-04-22 11:33:28|  分类: asp.net |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
原文地址:BindingList与list 比较作者:啊文

BindingList的主要特点在于,它可以在加入新的元素或者元素发生修改的时候触发相应的事件,而在基本集合类中是不具有这些功能的,而且由于在基本集合中Add方法不是Virtual方法,要想让它触发时间还真不是很方便。不过BindingList可以很好的满足你的功能。

    在Windows表单编程中,使用DataGridView可以很方便与数据库查询结果绑定,但是有时候查出来的数据需要经过一番处理才显示,这时候就不能直接绑定了。借助于BindingList,你便可以很方便得实现这个功能。
     BindingList是一个泛型容器,可以直接赋值给DataGridView的DataSource。而且以后的数据变化,只需要维护BindingList里的东西就行了,DataGridView自动更新数据显示。

 

最近做项目中突然发现还有个BindingList可以使用。查了不少信息。得出底下几点结论:

  1. 压根不是同一样东西,从命名空间中就能发现,一个是Component下的东西。主要特点在于Component的相关。另一个是Collection命名空间下的产物。主要用于集合相关。
  2. BindingList比List多的功能问为但他是GridView的数据源时,他有Allow....  Sort...等方法。从名字中可以看出对于该数据的一些约束。
  3. List比BindingList多的方法比如,AddRange方法,我之前项目中使用BindingList时需要将2个BindingList合并,却找不到方法。当然他可能有其他的方法而我不知道而已。
  4. 最后,BindingList和List并无任何关系不存在继承关系。个人建议,处理逻辑时用List,但作为数据源绑定是用BindingList.

使用DataGridView控件显示数据:

      dataGridView1.DataSource = 数据源;

      当数据源为数据集中的表时,可以通过修改数据集从而自动更新DataGridView控件的显示,但当数据源为泛型集合时,要通过修改数据 源来实现这一点,则可以将数据源声明为System .ComponentModel .BindingList <> 支持数据绑定的泛型集合。单纯地使用System.Collections.Generic.List<> 会出现错误。

1DataGridView数据绑定对比(DataTable与泛型List):
  
DataGridViewDataSourceDataTable的时候,DataTable的数据改变时,DataGridView的数据会随之改变,无需重新绑定到DataGridView
  
DataGridViewDataSource是泛型List,当List的数据改变时,则需要先将DataGridViewDataSource设置为new List(),再将改变后的List赋给DataGridViewDataSource

绑定List时,注意:切莫将DataGridViewDataSource设置为Null,否则会破坏DataGridView的列结构。

2、数据绑定后的添加删除问题:
  
如果要对绑定在DataGridView中的List进行数据的添加删除,先要把List转换成BindingList,再进行绑定:DataGridView.DataSource=new BindingList(new List)。否则的话会产生许多意想不到的错误。
如:初始绑定空数据后再添加数据绑定后,却取不到DataGridView.CurrentCell属性。

3、使用泛型绑定依然可以添加删除:
  IList list= new List();
  DataGridView.DataSource=list;//DataGridView
的行不能添加删除
  DataGridView.DataSource=new BindingList(list);//DataGridView
的行可以添加删除(只有允许添加行、删除行)

注:

     DataGridView数据绑定时使用BindingSource中转可以起到很好的控制DataGridView数据展示的效果。

 

其根本思想就是将对DataGridView行列的操作转化为对BindingSource中数据集实体和属性的操作。

 

将需要在DataGridView展示的数据封装成一个类,类的每个属性对应着DataGridView的一列。

 

DataGridView增加行时只需要给BindingSource加一个空对象,删除行时也只需要删掉BindingSource中的对象。

 

Winform上凡是涉及到绑定,最好用实现了IBindingList接口的BindingList。因为IBindingList实现了窗口控件与列表对象间的双向同步。
  评论这张
 
阅读(752)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017