- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想我很了解 BindingSource 类的作用——即在数据源和 UI 控件之间提供一层间接。它实现了 IBindingList 接口(interface),因此还提供了对排序的支持。而且我已经使用它足够频繁,没有太多问题。但我想知道我是否经常使用它。也许一个例子会有所帮助。
假设我在表单上只有一个简单的文本框(使用 WinForms),我想将该文本框绑定(bind)到返回字符串的类中的一个简单属性。在这种情况下是否值得使用 BindingSource?
现在假设我的表单上有一个网格,我想将它绑定(bind)到一个 DataTable。我现在应该使用 BindingSource 吗?
在后一种情况下,我可能不会使用 BindingSource,因为我可以收集到的数据表提供与 BindingSource 本身相同的功能。当添加、删除行等时,DataTable 将触发正确的事件,以便网格自动更新。
但在文本框绑定(bind)到字符串的第一种情况下,我可能会让包含字符串属性的类实现 INotifyPropertyChanged,以便在字符串更改时触发 PropertyChanged 事件。我将使用 BindingSource 以便它可以监听这些 PropertyChanged 事件,以便在字符串更改时自动更新文本框。
到目前为止听起来如何?我仍然觉得我的理解存在差距,这使我无法看到整个画面。到目前为止,这是一个相当模糊的问题,所以我会尝试提出一些更具体的问题——理想情况下,答案将引用上述示例或类似的东西......
(1) 在上述任何一个示例中都值得使用 BindingSource 吗?
(2) 似乎开发人员只是“假设”DataTable 类会做正确的事情,在正确的时间触发 PropertyChanged 事件。如何知道数据源是否能够做到这一点?为了让开发人员能够承担这种行为,数据源是否应该实现特定的接口(interface)?
(3) 在考虑是否使用 BindingSource 时,绑定(bind)什么 Control 是否重要?还是只有数据源会影响决策?也许答案是(这似乎很合乎逻辑):控件需要足够智能以监听 PropertyChanged 事件,否则需要 BindingSource。那么如何判断 Control 是否有能力做到这一点呢?同样,开发人员是否可以寻找控件必须实现的特定接口(interface)?
过去,正是这种困惑导致我总是使用 BindingSource。但我想更好地了解何时使用一个,以便我只在必要时这样做。
最佳答案
很老的问题。奇怪为什么到现在还没有人回答。好的,我会尝试分享我的经验。BindingSource
不仅仅是将控件绑定(bind)到集合的一种方式。在 WinForms 工作了十多年后,我最喜欢的 BindingSource
的最佳特性包括:
BindingSource
可以充当另一个 BindingSource
的 数据源 。 DataTable
只是
DataRow
的集合,即 DataTables 中没有当前记录的概念。
DataView
的情况也是如此(顺便说一句,您不能直接绑定(bind)到
DataTable
;当您这样做时,它实际上绑定(bind)到
DefaultView
的
DataTable
属性,即
DataView
。您也可以创建自己的
DataView
)。
ListBox
的学生,在右 Pane 中有几个文本框、组合框、复选框等,并带有一个选定学生类(class)的网格(详细信息)。在您的数据集中,您有两个名为
Student
和
Courses
的数据表。为了简单起见,我在这里避免使用动名词(Student_Course)。
Course
表有一个外键
StudentID
。这是您在此处设置绑定(bind)的方式(请注意我上面列出的所有 3 个功能如何在下面的设置中使用):
BindingSource
控件,分别命名为 bsStudent
和 bsCourses
。 DataSource
的 bsStudent
设置为 Student
数据表。 DataSource
的bsCourses
设置为bsStudent! DataMember
属性中,您将看到存在于我们两个表之间的 DataSet 中的关系的名称。选择它! bsStudent
的属性。 DataSource
。 BindingSource
,您将没有当前记录的概念,因此必须手动管理使所有 UI 保持同步。
关于.net - 什么时候值得使用 BindingSource?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3042474/
我正在生成代码,其中我恰好将 n 个单词从一个内存位置复制到另一个非重叠内存位置。 n 是静态已知的。 目前,我发出大量加载指令,然后是大量存储指令,但我怀疑从 n 的某个值开始,调用 memcpy会
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 4 年前。 Improve this ques
用例如下: 我有一张 map ,其中将插入一些键/值。 该程序将查询该 map ,但是在第一个查询之后,我可以保证该 map 将完全不会被修改。 因为查询的结果完全是输入的函数,所以在查询方法上放置属
Helo 伙计们,我尝试使用 Refs 并在他的内部提供 this.setState 但它给出: Maximum update depth exceeded. This can happen when
在检查事件时,使用带有 switch 或 if 的代码块是很常见的事情。如果变得简单,它可以是干净的代码,但似乎仍然有比需要更多的行,并且可以使用 lambda 进行简化。 用 if 阻止: if(a
Amazon 最近宣布在其 RDS 产品线中支持 Oracle: http://aws.amazon.com/rds/oracle/ 我想知道是否有人使用过它,或者是否有令人信服的理由将我的数据从 M
我是一名优秀的程序员,十分优秀!