Jus*_*tin 31 .net data-binding bindingsource winforms
我想我很清楚BindingSource类的作用 - 即在数据源和UI控件之间提供一个间接层.它实现了IBindingList接口,因此也提供了对排序的支持.而且我经常使用它,没有太多问题.但我想知道我是否经常使用它而不是我应该使用它.也许一个例子会有所帮助.
假设我在表单上只有一个简单的文本框(使用WinForms),我想将该文本框绑定到返回字符串的类中的简单属性.在这种情况下使用BindingSource值得吗?
现在让我说我的表单上有一个网格,我想将它绑定到DataTable.我现在应该使用BindingSource吗?
在后一种情况下,我可能不会使用BindingSource作为DataTable从我可以收集的内容中提供与BindingSource本身相同的功能.当添加,删除行等时,DataTable将触发正确的事件,以便网格自动更新.
但是在第一种情况下,文本框被绑定到一个字符串,我可能会让包含字符串属性的类实现INotifyPropertyChanged,这样它就可以在字符串更改时触发PropertyChanged事件.我会使用BindingSource,以便它可以监听这些PropertyChanged事件,以便它可以在字符串更改时自动更新文本框.
到目前为止这听起来怎么样?我仍然觉得我的理解存在差距,这使我无法看到整体情况.到目前为止,这是一个非常模糊的问题,所以我会尝试提出一些更具体的问题 - 理想情况下,答案会引用上面的例子或类似的东西......
(1)在上述任何一个例子中是否值得使用BindingSource?
(2)似乎开发人员只是"假设"DataTable类在正确的时间触发PropertyChanged事件时会做正确的事情.如何知道数据源是否能够执行此操作?是否存在数据源应该实现的特定接口,以便开发人员能够承担此行为?
(3)在考虑是否使用BindingSource时,控制绑定的是否重要?或者只是影响决策的数据源?也许答案是(这看起来足够合乎逻辑):Control需要足够智能以监听PropertyChanged事件,否则需要BindingSource.那么如何判断Control是否能够做到这一点呢?同样,开发人员可以寻找控件必须实现的特定接口吗?
正是这种困惑在过去导致我总是使用BindingSource.但是我想更好地理解何时使用它,所以我只在必要时这样做.
很老的问题。想知道为什么到现在还没有人回答。好的,我会尝试分享我的经验。
ABindingSource不仅仅是将控件绑定到集合的一种方式。在 WinForms 工作了十多年后,BindingSource我最喜欢的最好的功能包括:
BindingSource可以充当另一个的数据源BindingSource。为了充分理解这些功能,我将在 DataSet 的上下文中解释它们,这是迄今为止 WinForms 中最常用的数据源类型,尤其是在业务线应用程序中。
货币管理归结为当前记录的概念。ADataTable只是DataRows的集合,即DataTables 中没有当前记录的概念。情况也是如此DataView(顺便说一句,您不能直接绑定到 a DataTable;当您这样做时,它实际上绑定到了DefaultViewthat的属性,即DataTablea DataView。您也可以创建自己的DataView)。
在 Master/Detail 类型的 UI 的情况下,货币管理确实很方便。因此,假设您ListBox在左窗格(主)中有一个学生,在右窗格中有几个文本框、组合框、复选框等,带有选定学生课程的网格(详细信息)。在您的数据集中,您有两个名为Student和 的数据表Courses。为简单起见,我在这里避免使用动名词 (Student_Course)。该Course表有一个外键StudentID。这是您在此处设置绑定的方法(请注意我上面列出的所有 3 个功能在下面的设置中是如何使用的):
BindingSource向表单中添加两个控件,命名为bsStudent和bsCourses。DataSource的bsStudent,以Student数据表。DataSource的bsCourses,以bsStudent!DataMember属性中,您将看到存在于我们两个表之间的 DataSet 中的关系的名称。选择它!bsStudent的属性。DataSource课程网格 bsCourses。你已经完成了。无需编写一行代码(可以这么说),您就成功地创建了主从视图。BindingSource 控件现在将处理学生列表中的当前记录,不仅更新原子控件(文本框、组合框等),还更新课程网格,课程网格将自动更新其内容以显示当前选定学生的课程。
我的朋友,这是我最喜欢的 BindingSource 的角色(以及排序、过滤等其他好东西)。如果不涉及BindingSource控件和数据存储之间的中间部分,您就没有当前记录的概念,因此必须手动管理保持所有 UI 同步。
嗨,我对这个问题也有一些困惑。
当我使用数据表时,它们实现了所有接口。
然而我总是使用绑定源只是为了确定..:)
有一些争论为什么我能想到
| 归档时间: |
|
| 查看次数: |
9117 次 |
| 最近记录: |