将bindingsource与bindinglist <business obj>一起用作数据源有什么好处?

use*_*062 15 .net c# bindinglist bindingsource winforms

我可以通过设置DataSource属性直接将我的DataGridView控件绑定到我的业务对象的绑定列表.我的业务对象实现了INotifyPropertyChanged,因此当新项目添加到绑定列表或更新现有项目时,DGV会更新.

关于处理单个记录,我可以将业务对象绑定到文本框和其他相关控件.

我也可以从BindingList派生并创建一个CustomBindingList类来实现IBindable所需的方法,如下面的链接所述:http: //msdn.microsoft.com/en-us/library/aa480736.aspx

或者,我见过人们建议使用BindingSource.BindingSource的Datasource是业务对象,DGV的DataSource是BindingSource.

无论如何,基于BindingSource并不能为我提供:

  1. 过滤(过滤器不起作用).需要由我提供实施.
  2. 排序和搜索不起作用.需要由我提供实施.

那么,为什么推荐BindingSource方法呢?

更广泛的图片:OOPS概念和C#的新手.使用数据库应用程序.的WinForms.到目前为止只使用了DataSet/DataTable方法.现在尝试创建和使用我自己的自定义类.

通常具有主/明细表格.当我单击DGV中的Detail行时,我想在单独的窗口中编辑该记录.所以我需要处理DGV中该行所代表的列表项.试图找到一个解决方案,这让我想到了这一点和这个疑问.

鉴于我想做什么,哪种方法更好,为什么?

这里的一些指示确实会有所帮助,因为我对此非常陌生.

Mar*_*tin 3

当表单上的多个控件使用相同的数据源时,建议使用 BindingSource(幕后:Windows 窗体数据绑定的改进

设计时:我个人发现 BindingSource 在将数据绑定到控件时从业务对象中选择属性时非常有用。

要获取当前选定行的句柄,请尝试将 bindingSource1.Current as MyBusinessObject;

至于过滤和搜索:我使用第三方 dll 来实现已实现的网格。所以无法帮助您,抱歉。

当您使用不同类型业务对象的列表时,不要直接使用该列表

List<IAnimal> animals = new List<IAnimal>();
animals.Add(new Cat());
animals.Add(new Dog());
bindingSource1.DataSource = animals;
Run Code Online (Sandbox Code Playgroud)

而是使用像这样的 BindingList:

bindingSource1.DataSource = new BindingList<IAnimal>(animals);
Run Code Online (Sandbox Code Playgroud)

这将确保列表中所有访问的对象都是 IAnimal 类型,并避免一些异常。