gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 07:48:12 26 4
gpt4 key购买 nike

我可以通过设置 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com