c# - 使用带有 bindinglist<business obj> 的绑定(bind)源作为数据源有什么好处?

标签 c# .net winforms bindingsource bindinglist

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

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

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

或者,我看到有人推荐使用 BindingSource。 BindingSource 的 Datasource 是业务对象,DGV 的 DataSource 是 BindingSource。

无论如何,基于 BindingSource 的它不会提供给我:

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

那么,为什么推荐使用 BindingSource 方法?

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

通常有主/明细表。当我单击 DGV 中的详细信息行时,我想在单独的窗口中编辑该记录。所以我需要获取 DGV 中该行所代表的列表项的句柄。试图为此找到解决方案让我想到了这一点和这个疑问。

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

这里的一些建议真的很有帮助,因为我对此很陌生。

最佳答案

当窗体上的多个控件使用相同的数据源时,建议使用 BindingSource (Behind the Scenes: Improvements to Windows Forms Data Binding)

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

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

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

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

List<IAnimal> animals = new List<IAnimal>();
animals.Add(new Cat());
animals.Add(new Dog());
bindingSource1.DataSource = animals;

而是像这样使用 BindingList:

bindingSource1.DataSource = new BindingList<IAnimal>(animals);

这将确保列表中所有访问的对象都是 IAnimal 类型并为您节省一些异常。

关于c# - 使用带有 bindinglist<business obj> 的绑定(bind)源作为数据源有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10266611/

相关文章:

c# - 如何在 C# 中以编程方式确定类型是否接受 null 值?

c# - 在数量有限的多个线程上运行一个函数

.NET LINQ : Check array index and length EXCEPTION

c# - 重写表单事件方法的基本调用的必要性

C# , SQL 更新多行

c# - Xamarin Forms 从 sqlite 数据库中删除

c# - 如何将数据从 Microsoft Access 传输到 SQL Server 2008?

c# - 您会推荐什么开源二维码生成器?

c# - PictureBox - 处理图像非透明区域的点击事件

c# - 如果有人使用外部类库中的某些类,我如何报告编译错误