gpt4 book ai didi

c# - WinForms 数据绑定(bind)和外键关系

转载 作者:太空狗 更新时间:2023-10-29 21:52:38 26 4
gpt4 key购买 nike

我正在开发一个 WinForms 应用程序(.Net 3.5,无 WPF),我希望能够在其中显示数据绑定(bind) DataGridView 中的外键查找。

这种关系的一个例子是我有一个 OrderLines 表。 Orderlines 与 Products 具有外键关系,而 Products 又与 ProductTypes 具有外键关系。

我想要一个数据绑定(bind)的 DataGridView,其中每一行代表一个订单行,显示该行的产品和产品类型。

用户可以直接向网格添加或编辑订单行,并从 comboBoxColumn 中为订单行选择产品 - 然后应该更新产品类型列,在同一行中显示所选产品的产品类型。

到目前为止,我发现最接近合适的方法是引入表示订单行的域对象,然后将 DataGridView 绑定(bind)到这些订单行的集合。然后,我将属性添加到公开产品和产品类型的订单行对象,并引发相关的 notifypropertychanged 事件以使所有内容保持最新。然后,在我的订单行存储库中,我可以连接此订单行对象与我的数据库中的三个表之间的映射。

这适用于事物的数据绑定(bind)方面,但必须在存储库中手动编写所有 OR 映射的代码似乎很糟糕。我认为 nHibernate 将能够帮助完成这种连接,但我正在努力通过所有外键进行映射 - 它们似乎工作正常(订单行产品的外键查找基于外键创建正确的产品对象)直到我尝试进行数据绑定(bind),我无法获取数据绑定(bind) ID 列来更新我的产品或产品类型对象。

我的一般方法是否正确?如果是,映射问题的好的解决方案是什么?

或者,是否有更好的数据绑定(bind)行解决方案,包括我什至没有考虑过的外键查找?

最佳答案

我认为你遇到的问题是,当你绑定(bind)到一个网格时,它不足以支持 INotifyPropertyChanged,但你必须在你的 IBindingList 中触发 ListChanged 事件。实现并确保您覆盖并为 SupportsChangeNotification 返回 true属性(property)。如果您不为此返回 true,则网格不会寻找它来了解数据是否已更改。

在 .NET 2.0+ 中,您可以使用 BindingList 创建通用集合类,这将解决大部分问题(只是不要忘记重写 SupportsChangeNotification 属性并返回 true)。

如果您用于数据绑定(bind)的类具有集合属性(例如 IBindingList 或 BindingList),则您可以将外键网格直接绑定(bind)到该属性。在窗体设计器中配置绑定(bind)时,只需选择集合属性作为网格的数据源。它应该“正常工作”。唯一需要偷偷摸摸的部分是确保您以正确的方式处理空集合或 null 集合。

关于c# - WinForms 数据绑定(bind)和外键关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29654/

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