- 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/
我注意到这两种在 winforms 中实现数据绑定(bind)的方法。但是,我想知道其中哪一种更受欢迎(在整体性能方面,例如设计时间,效率?据我所知,这两种是: BindingSource 作为 Bi
是什么让我使用这样的东西: DataGridView dgvDocuments = new DataGridView(); BindingSource bindingSource = new Bind
我有一个带有数据 GridView 和一些绑定(bind)到绑定(bind)源的文本框的表单。表单上有一个新建按钮和保存按钮。我希望用户 单击“新建”按钮,这将导致网格转到新行并且文本框变为空白(因为
我想我很了解 BindingSource 类的作用——即在数据源和 UI 控件之间提供一层间接。它实现了 IBindingList 接口(interface),因此还提供了对排序的支持。而且我已经使用
我无法获取当前行值。我该怎么办? bindingSource1.DataSource = LData; (LData is Generic List) public DataRow currentRo
绑定(bind)源代码: Component.DataSource = new BindingSource(yourSource, ????); 我看到的所有示例都遵循这种模式,而不是 ????,我总
是否可以在多个列上使用 BindingSource 的 Find 方法? 例如,假设我有一个显示当前宠物的 GridView ;两个组合框,cboPetType 和 cboGender;以及一个用于根
我正在尝试绑定(bind)到 Linq-To-SQL 查询的结果,我已将其设置为填充图形。 该图沿着 X 轴的日期线和 Y 轴的货币线。有两个系列,一个是进钱的,一个是出钱的。 到目前为止还很简单。
我遇到的问题是过滤器不接受日期时间的时间部分。 为了清楚起见, 这有效。 " AND NextWorkDate <= #" + DateTime.Now.AddDays(1).ToString("dd
我的winform中有很多bindingsource,我想动态改变我的gridview的dataSource,所以我想通过名称获取bindingSource。我找到了以下代码来从我的 winform
我想根据日期从数据库中过滤值。 数据库中的日期包含如下值:2008-12-28 18:00:00。我的类(class)有一个 DateTime 变量,具体取决于我要过滤的内容。理想情况下它会像这样工作
为了解释这个问题,我把所有需要的东西都放到了一个小的示例应用程序中,希望能解释这个问题。我真的试图尽可能减少所有内容,但在我的实际应用程序中,这些不同的 Actor 彼此不认识,也不应该。因此,像“在
我有一个 C# Windows 窗体项目,其中包含一个包含 2 个列表框和一个按钮的窗体。 在 FormLoad 上,左侧 ListBox 填充了一个列表(大约 1800 项),其中包含有关证券(ID
使用绑定(bind)到绑定(bind)源控件的 datagridview 绑定(bind)到 LINQ to SQL类,我想知道如何将 bindingSource 定位到特定记录,也就是说,当我在文本
我有一个绑定(bind)到 DataTable 的 BindingSource。 我使用 BS 过滤器并希望使用 Bindingsource 迭代数据表的过滤数据集。 我知道我可以执行 MoveFir
这是我正在处理的表单部分: 以下代码使用 bindingSource 将 BindingNavigator 链接到数据集。我可以使用此绑定(bind)源将两个文本框连接到数据吗? 我是否只需要使用文本
我正在考虑使用数据绑定(bind) - 最简单的事情似乎是使用 BindingSource 来包装我的数据对象。 但是,虽然 CurrentItemChanged 事件会告诉我属性何时发生更改,但它不
这是我正在处理的表单部分: 以下代码使用 bindingSource 将 BindingNavigator 链接到数据集。我可以使用此绑定(bind)源将两个文本框连接到数据吗? 我是否只需要使用文本
来自微软:“BindingSource.ListChanged 事件在基础列表更改或列表中的项目更改时发生”。 但在我的示例中,事件会在每次位置更改时触发。表单有一个 UserControl、一个 B
我有一个只有 1 个对象作为数据源的 BindingSource。 我绑定(bind)了数据源上的一些值。这非常有效。 但是。 当我这样做时: bindingSource.DataSource = n
我是一名优秀的程序员,十分优秀!