问题标签 [bindingsource]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 我可以从 BindingSource 获取项目类型吗?
我想获取 BindingSource 连接或配置的项目的类型。BindingSource.DataSource 属性可以设置为对象、列表或类型。如果是Type,显然还没有绑定项,但我还是想得到Type。对于列表,我需要项目类型,而不是列表类型。
我目前有一个用于实现 IListItemType 接口的业务对象的自定义列表类型,我创建它是为了解决这个问题。我现在想让它以更通用的方式工作,以便它适用于任何列表。
我已经查看了 API 文档,寻找一种很好的方法来做到这一点,但到目前为止我还没有运气。我错过了什么,或者这只是我不能或不应该做的事情?
.net - 什么时候值得使用 BindingSource?
我想我非常了解 BindingSource 类的作用——即在数据源和 UI 控件之间提供一个间接层。它实现了 IBindingList 接口,因此还提供了对排序的支持。而且我已经使用它足够频繁,没有太多问题。但我想知道我是否经常使用它。也许一个例子会有所帮助。
假设我在表单上只有一个简单的文本框(使用 WinForms),我想将该文本框绑定到返回字符串的类中的一个简单属性。在这种情况下是否值得使用 BindingSource?
现在假设我的表单上有一个网格,我想将它绑定到一个 DataTable。我现在应该使用 BindingSource 吗?
在后一种情况下,我可能不会使用 BindingSource,因为我可以收集到的数据表提供与 BindingSource 本身相同的功能。当添加、删除行等时,DataTable 将触发正确的事件,以便网格自动更新。
但在文本框绑定到字符串的第一种情况下,我可能会让包含字符串属性的类实现 INotifyPropertyChanged,以便在字符串更改时触发 PropertyChanged 事件。我将使用 BindingSource 以便它可以侦听这些 PropertyChanged 事件,以便在字符串更改时自动更新文本框。
到目前为止听起来如何?我仍然觉得我的理解存在差距,这使我无法看到整个画面。到目前为止,这是一个相当模糊的问题,所以我会尝试提出一些更具体的问题——理想情况下,答案将参考上述示例或类似的东西......
(1) 在上述任何一个示例中都值得使用 BindingSource 吗?
(2) 似乎开发人员只是“假设”DataTable 类会做正确的事情,在正确的时间触发 PropertyChanged 事件。如何知道数据源是否能够做到这一点?为了让开发人员能够承担这种行为,数据源是否应该实现特定的接口?
(3) 在考虑是否使用 BindingSource 时,绑定什么 Control 是否重要?还是只有数据源会影响决策?也许答案是(这似乎很合乎逻辑):控件需要足够智能以侦听 PropertyChanged 事件,否则需要 BindingSource。那么如何判断 Control 是否有能力做到这一点呢?同样,开发人员是否可以寻找控件必须实现的特定接口?
过去,正是这种困惑导致我总是使用 BindingSource。但我想更好地了解何时使用一个,以便我只在必要时这样做。
c# - 在存在 BindingNavigator 的情况下绑定 ListBox 的 SelectedItem
我正在尝试将 ListBox 的 SelectedItem 数据绑定到属性。以下代码是一个示例:
如果您只是选择一个项目,向前移动,选择一个项目然后退出,它会按预期工作。但是,如果您使用导航器在两个外部对象之间来回切换,则所选项目似乎被错误的值覆盖。似乎每次 BindingNavigator 移动到元素时,ListBox 都会被告知移动到其集合中的第一项,从而覆盖绑定到其 SelectedItem 的变量中的任何值。
关于如何解决这个问题的想法?提前致谢。
编辑:这是示例项目的存档,包括调试二进制文件。
http://www.mediafire.com/?dzmqmz0mynj
编辑:这是基于接受的答案的辅助函数:
.net - 我可以暂时阻止对 DataGridView 的手动更改以更新基础数据源吗?
我试图找到另一个像这样的问题,因为它确实看起来像是以前可能被问过的问题;但我找不到它。
基本上,我有一个DataGridView
,它绑定到一个BindingList<T>
. 我知道,总的来说,数据绑定非常好,并且可以节省大量(我们的开发人员的)时间。然而,这个网格存在一个非常大的性能问题。
根据以前的经验,我相当有信心通过手动更新计时器中的可见单元格DataGridView
而不是实现来大大提高性能INotifyPropertyChanged
(这不是一个真正可行的选择,因为此网格中的许多值每次更改数十次第二)或打电话Refresh
。但是有一个问题:如果我手动一个一个地更新网格中的单元格,每次更新都会触发set
数据绑定对象的相应属性,加起来会导致性能显着下降。
确实没有必要进行所有这些set
调用,因为我放入网格单元格的值是直接从这些属性中检索的(所以我基本上是在读取一个值,然后将其写回自身)。
如果我可以暂时禁用DataGridView
: 的此功能,暂时关闭负责根据网格更新更新底层数据源的功能,那就太好了。然后,当我手动完成更新后,重新打开该功能,以便用户的更新确实会影响数据源。
我尝试使用 aBindingSource
并将其DataSource
属性设置为BindingList<T>
并调用SuspendBinding
/ ResumeBinding
; 但这似乎不起作用。set
电话还在继续。
有什么方法可以完成我在这里的目标吗?我是否完全走错了路?
c# - 使用 BindingSource,我如何判断我是否有待处理的更改?
我在编辑 SQL 服务器上的简单表的 WinForms 项目中使用 BindingSource。如果用户更改了字段,我希望“保存”图标亮起。我已经尝试过 DataSet 的 HasChanges() 方法,但是在我进行更改后返回 false。
如何判断用户是否更改了某些内容?
c# - 访问 bindingsource 列值
如何使用代码更新绑定源中的列值?
我正在尝试类似的东西:
此代码当前错误说明:“无法将带有 [] 的索引应用于‘对象’类型的表达式”。
非常感谢您对重写此内容的任何帮助!
winforms - 如何在更新 Datagridview 时找到基础 Datatable 中哪些行已更新?
这就是我想要实现的目标:
- 使用来自非数据库源的数据填充的 DataTable
- 此表使用 BindingSource 绑定到 DataGridView
- DataGridView 由用户更新,因此某些单元格现在具有新值。
- 因为表绑定到 datagridview,所以它的值会被更新。
如何在网格/数据表中仅获取更新的行(已编辑的行)?
我试过了 :
但这总是返回 0 行。有没有办法只获取修改后的行?
最差的情况:
- 保留原始表格的副本
- 从 datagridview 数据源中获取新表
- 比较所有行。
谢谢!
c# - 时间:2019-04-01 标签:c#bindingsource和linq
我有一个绑定源,已由
tableadapter.fill(DS, param1);
可以说这个绑定源有:
如何使用 linq 获取给定 char 'A' 的 num 值?
我可以使用 foreach(this.p_EM_Select_Event_TypeBindingSource 中的 DataRowView 数据)识字,但我想知道如何在 linq 中执行此操作
谢谢,
c# - 通过 DataTable.Select、BindingSource 和 foreach(C#、ADO.NET)进行搜索
我有一个 DataTable X,如果我现在想搜索某个条目,使用 BindingSource.Filter、X.Select() 还是只使用 foreach 会更快/更好吗?
c# - 具有自我跟踪实体的实体框架过滤器导航属性
我正在使用自我跟踪实体,并且有一个场景,我有一个实体,它代表一个我们将称为表 A 的表。A 是另一个表 B 的父级,该表也表示为一个实体。在我的 WinForm 上,我有 3 个不同的绑定源,每个绑定源代表表 B 中不同类型的记录,但都是表 A 的子项。所以我想要完成的是使用实体/表 B 的导航属性来设置每个绑定源
例如
理想情况下,每个绑定源的 DataSource 将是 TrackableCollection 类型,因此当我保存 A 时,对 B 的 3 个过滤实例的所有更改也会被保存。
我为此尝试了一些不同的选择,但没有任何运气,所以我希望其他人也遇到过同样的情况。
谢谢!