数据绑定应该使用 BindingSource 类 而不是使用ListControl.databingding

不使用 BindingSource 作为控件和基础数据源的中间层也行,但是 BindingSource 在很多时候非常有价值,这里只展示了一个很小的方面。

1. ListControl.DataSource 属性

获取或设置此 ListControl 的数据源。实现 IList 或 IListSource 接口的对象可以作为数据源,如 DataSet 或 Array。

假设现在有两个对象:List<T> 的 mylist,ListBox 类型的 listBox1。下面这条语句可以使 mylist 的内容显示到 listBox1 中(方法一):

listBox1.DataSource = mylist;

2. BindingSource 类

封装窗体的数据源。BindingSoiurce 实现的接口有:Component, IBindingListView, IBindingList, IList, ICollection, IEnumerable, ITypedList, ICancelAddNew, ISupportInitializeNotification, ISupportInitialize, ICurrencyManagerProvider。

假设现在还有一个 BindingSource 对象 bsrc ,下面的语句也可以使 mylist 的内容显示到 listBox1 中(方法二):

bsrc = new BindingSource(mylist, null);
listBox1.DataSource = bsrc;

3. 为什么需要 BindingSource ?

先看看 BindingSource 除了让控件知道从哪儿读取数据,还能做什么:

它通过提供一个间接寻址层、当前项管理、更改通知和其他服务简化了窗体中控件到数据的绑定。这是通过将 BindingSource 组件附加到数据源然后将窗体中的控件绑定到 BindingSource 组件来实现的。与数据的所有进一步交互,包括定位、排序、筛选和更新,都通过调用 BindingSource 组件实现。
值得注意的最后一句话,我在《对象引用的保护措施》中提出的“包装类”方案就是想让包装类做到这样。

总之,BindingSource 可以监视(直观地说是“监视”,本质上是“代理”)数据源的变化。在上面的方法一中,listBox1 不能跟踪 mylist 的变化,比如由这条语句引起的数据变更:

mylist.RemoveAt(3);
如果要让 listBox1 反应 mylist 的最新情况,需要:

listBox1.DataSource = null;
listBox1.DataSource = mylist;
或其它可以使 listBox1 与 mylist "从头开始"的语句


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值