问题标签 [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.

0 投票
1 回答
1096 浏览

.net - 具有排序实体集的 Datagridview? (.NET 3.5)

我希望有一个简单的答案来解决我在谷歌搜索数小时中错过的这个问题......

我有一个 DataGridView 需要显示和添加/删除/编辑数据库中的记录。我使用的是实体框架,所以记录最初是 EntitySet。

  • 尝试一

BindingSource 具有排序功能,但是哦……如果您的 DataSource 是 EntitySet,它们似乎实际上不可用。

  • 尝试二

尝试在网格上实现自定义排序,但是哦……如果网格是数据绑定的,则不允许自定义排序。

  • 尝试三

对我的数据执行 Linq 查询并在那里使用 order 函数。这可以获取我的有序数据,但是哦……它把 AllowNew 更改为 false。我可以强制它回来,但是添加到 DataGridView 的记录不会添加到我的 EntitySet 中(尽管奇怪的是任何更新都被反映了)。

  • 尝试四

按照#3,但现在我处理 BindingSource 的 AdditionalNew 事件并显式创建我的对象并将其添加到 EntitySet。然后,这将起作用,除非用户在网格底部输入新的条目行,我会得到一行完整的默认值添加到我的数据库中。如果用户继续输入该行,我会得到很多行。所以这也不好。

必须有一种方法来做到这一点 - 当然,在网格中显示一些数据库记录并允许完全编辑是最基本的要求(并且以随机顺序显示行并没有多大用处)?

非常感谢您的任何帮助...

0 投票
1 回答
4962 浏览

c# - C# WinForms BindingList 和 DataGridView - 不允许 EDIT 阻止创建新行?我该如何解决这个问题?

关于我将 DataGridView 与 BindingList 一起使用,我将禁用编辑当前行,但允许添加新行。我遇到的问题是,当我不允许编辑时,这似乎阻止了一个人添加新的行项目,因为当您将表格放入该新行的单元格时,它似乎不允许编辑???

知道如何解决这个问题吗?我的代码部分如下:

谢谢

0 投票
1 回答
331 浏览

inotifypropertychanged - PropertyChanged 事件,OnClick 时引发?

我有一个 WinForms 应用程序,其中包含一些实现 INotifyPropertyChanged 的​​业务对象,并通过表单上的一些控件和 BindingSource 挂钩 PropertyChanged 事件,这将事件引发回我的业务对象层...

只有一个问题 - 一切正常,除非只有当控件失去焦点时。例如,用户更改了一些文本字段,但他必须在点击“保存”按钮之前实际单击某个其他控件(例如,他必须将焦点放在另一个控件上)。

有没有办法将它连接到 OnClick 或其他东西,以便在用户键入文本时(甚至在他更改下拉值之后)将更改传播到我的业务对象层,这样我就不必强迫用户在他可以保存之前单击不同的文本框?

谷歌搜索让我无处可去,只能找到有关如何在 WPF =( 中轻松执行此操作的示例。但没有 WinForms 示例...

请指教,

德鲁

0 投票
7 回答
8767 浏览

winforms - 插入后刷新 BindingSource (Linq To SQL)

我有一个绑定到BindingSource绑定到DataContext表的网格,如下所示:

BindingSource插入后无法刷新。这没有用:

这都不是:

我该怎么办?

0 投票
3 回答
4446 浏览

.net - 使用 WriteValue 手动绑定数据

如果我通过设置 DataSourceUpdateMode = Never 关闭绑定数据源的自动更新,然后使用按钮更新整个批次(使用 binding.WriteValue),则会出现问题 - 即,仅更新第一个绑定控件的数据源。所有其他控件都重置为原始值。

这是因为当当前对象发生变化时(如上述WriteValue之后发生的情况),如果ControlUpdateMode = OnPropertyChange,那么所有其他控件都会重新从数据源中读取该值。

避免这个问题的标准方法是什么?

一种方法是从 BindingSource 派生一个类并添加一个 WriteAllValues 方法。此方法执行以下操作:

(1)对于每个Binding,保存ControlUpdateMode

(2) 对于每个Binding,设置ControlUpdateMode = Never

(3) 对于每个Binding,调用WriteValue方法

(4) 对于每个 Binding,将 ControlUpdateMode 重置为保存的值

(5) 对于每个Binding,如果ControlUpdateMode = OnPropertyChange,调用ReadValue方法。

你能看出这样做有什么问题吗?

如果使用您自己的类,实现 IEditableObject 会解决问题吗?

在我正在处理的另一个控件中,我实现了自己的绑定。我解决这个问题的方法是使用以下代码。(我已经做到了最低限度,希望你能遵守!):

因此,当调用 UpdateDataSourceFromControl 时,将为同一 BindingSource 中的所有其他控件调用所有 CurrentItemChanged 事件。但是,由于设置了 ControlDoingExplicitUpdate,它们不会从数据源重新读取值,除非它们恰好是进行更新的控件。在所有这些事件完成后,ControlDoingExplicitUpdate 设置为 Nothing,以便恢复正常服务。

我希望你能关注这个,并且 - 再次 - 我问,你能看到这有什么问题吗?

0 投票
2 回答
4379 浏览

c# - BindingSource 看到变化,DataTable 没有

我最近从 Java/RMI 切换到 C#/.net,并且正在开发我的第一个项目,使用数据绑定来更新 Oracle 中的记录。在我正在构建的第一个表格中,我有一个车辆记录的详细视图(VIN、年份/品牌/型号、车牌号等)。在写入数据库方面,我做的第一件事是保存更新:

一切看起来都不错,所以我继续添加新记录。我做了一个按钮(我在网上看到很多人都说自己制作比使用绑定导航器更好或更好)并将其放入它的处理程序中:

所以在那里(上面)我将初始值放入一些必需的列中(VEH_ID 是 PK)。然后我运行应用程序,在文本框中为 VIN 输入一个值,然后保存(与上面的代码相同),这次 GetChanges() 返回 null。

所以我在“添加新”按钮处理程序中尝试了这个,而不是第一件事:

现在我发生了一些非常有趣的事情。
- 在选择现有记录之前,我可以成功输入并保存任意数量的新记录的数据。如果我移动到现有记录,然后添加新记录,那么当我去保存新记录时,代码中明确设置的值会写入数据库,但输入到 GUI 中的数据不会“占用”新纪录。
- 我可以成功更改任意数量的现有记录,直到输入新记录。如果我添加一个或多个新记录,保存,然后尝试将更改保存到现有记录,则对 GetChanges() 的调用返回 null(同样,显然它不是“看到”通过 GUI 输入的内容)。

所以在这两种情况下,从旧到新或从新到旧的变化似乎会引入一些条件,使数据表不知道输入到 GUI 中的内容。但是从旧到新只需选择现有记录,而从新到旧更改时,它只会在保存后中断(如果我做了一个新记录然后放弃它而不保存,我可以毫无问题地修改现有记录) .

我将它添加到保存处理程序中,就在实际保存之前(在循环中,因为 ch 是一个数据表,但实际上代码设置为在继续之前您必须保存或放弃新记录的位置 - 因此循环只执行一次):

这个特定文本框绑定到的列在哪里VIN_ID(我也在表单上的其他字段中尝试过这个,以验证它不仅仅是那个文本框的问题)。第一个消息框(来自绑定源的 DataRowView)显示了我在文本框中输入的 vin。第二个消息框(GetChanges() 返回的表中的行)显示 的空字符串VIN_ID,尽管它具有正确的(通过代码设置)值VEH_IDGRNTE_IDGRNTE_ID如果我选择不同的值来使用绑定到该列的组合框,也会发生同样的事情;数据表中的行仍然具有通过代码设置的值,“不知道”通过 GUI 选择的值。

为什么数据表和绑定源对同一字段有不同的值?为什么数据表只能“看到”通过 GUI 输入的值,直到用户从现有切换到新的,或从新的切换到现有的?

谢谢。


天使:我在我的服务中这样做:

这是从我原来的帖子中的这个块调用的:


约翰内斯:

对 EndEdit() 的调用是保存处理程序中的第二行(靠近我的帖子的顶部)。我也应该在其他地方调用它吗?

谢谢。


澄清一下:SaveVehicles 不可能是问题的根源,因为问题出现在 SaveVehicles 被调用之前。在调用 EndEdit()之后和实际写入数据库之前,什么条件会导致 BindingSource 和 DataTable 之间的差异?

0 投票
5 回答
22770 浏览

c# - 选择新添加的行 - DataGridView 和 BindingSource

我正在向绑定到 DataGridView 的 BindingSource 添加一个新行

在此之后,使用 BindingSource 获取新添加的行是在排序时返回 DataGridView 中的下一行。

myBindingSource.Current 给出 ROW “C”。(它成为 DataGridView 中的选定行)

我需要这个,因为我只想更新新添加的行

而不是整张桌子。

而且,我想在插入后在 DataGridView 中选择这条新添加的行。

有可能以某种方式吗?

0 投票
1 回答
1137 浏览

c# - 在 gridview/bindingsource 中重新排序记录

我正在使用 Telerik 的 WinForms 控件,并有一个绑定到绑定源的 radGridView 来显示我的数据。我想稍微扩展一下它的功能,为用户提供一种额外的方式来订购记录。

我在网格视图中添加了两个命令按钮(向上、向下)以帮助实现此功能。基本上,当单击“向上”按钮时,我希望当前行与上面的行交换位置;如果单击“向下”按钮,则当前行应与下一行交换位置。

示例数据:

1
2
3
4
5

如果单击第三行上的“向上”按钮,则数据应如下所示:

1
3
2
4
5

如果单击第三行的“向下”按钮,数据应如下所示:

1
2
4
3
5

我怎样才能做到这一点?我是否必须修改这些行的绑定源位置或 gridview 行的索引?其他方式?任何例子都非常感谢!

0 投票
6 回答
13125 浏览

c# - 将行添加到 BindingSource 提供与保存到 DB 中的内容不同的自动增量值

我有一个显示记录列表的 DataGridView,当我点击插入按钮时,表单应该添加一条新记录,编辑它的值并保存它。

我有一个绑定到 DataGridView 的 BindingSource。我将作为参数传递给 NEW RECORD 表单,所以

当用户确认保存它时,我会做一个

并在处理表单后保存新行并将绑定位置更新为新行

问题是该表有一个 AUTOINCREMENT 字段,并且保存的值可能与 bindingSource 在 EDIT TIME 中给出的值不对应。

因此,当我再次关闭并打开 DataGridView 时,新的 rowd 给出其 ID 是基于当时 undelying DB 中的可用槽位被保存,它只是忽略 BindingSource 生成的广告编辑时间的值,

由于绑定源给出的值应该被另一个表用作foreingKey,它使引用不一致。

有没有办法让真实的ID被保存到数据库中?

0 投票
1 回答
1477 浏览

.net - 如何创建主从插入表单

我正在使用Northwind 数据库,我想创建一个C# .Net Framework windows 窗体来生成订单输入。

我已经链接了我的数据集中的表和绑定源,并使用绑定导航器来查看它们中的每一个

问题是我无法找到将订单详细信息添加到未创建订单的方法,因为它会引发向数据库插入空值的异常。(我认为使用自动增量会解决它,但它不会)

你们有什么想法吗?