无法将绑定控制更改推送到数据集

Posted

技术标签:

【中文标题】无法将绑定控制更改推送到数据集【英文标题】:Unable to push bound control changes to the dataset 【发布时间】:2015-08-24 18:40:01 【问题描述】:

我正在尝试比较数据绑定文本框的原始值和当前值。我做了一些研究并尝试了一些方法,但我似乎无法让它发挥作用。我通过 Visual Studio 2012 使用 vb.net。数据库在 SQL 2012 服务器上运行,我使用存储过程来提供数据。

填写声明:

Me.SpGetEmployeeTableAdapter.Fill(Me.DsEmployee.spGetEmployee, cboEmpId.SelectedValue)

我的文本框被称为 txtLastName 并且 txtLastname.Text 绑定到 spGetEmployeeBindingSource.LastName

我有一个处理 txtLastName.LostFocus 的方法,所以我可以查看如下值:

Private Sub LastName_Out() Handles txtLastName.LostFocus

      Dim x as String
      x = "Hi" (breakpoint) 

End Sub

我运行应用程序并使用上面的填充为员工 Smith 加载数据。我转到文本框,将其更改为 Jones 并标出。我点击了上面的断点并检查了 Watch 窗口中的值:

me.DsEmployee.spGetEmployee(0)("LastName", DataRowVersion.Original).ToString
me.DsEmployee.spGetEmployee(0)("LastName", DataRowVersion.Current).ToString

这两行都将 Smith 显示为值,但在屏幕上您会看到 Jones。

我的研究表明我可能必须运行 EndCurrentEdit 才能将 textbox.text 值推送到数据集,但我没有运气。以下是我尝试结束当前编辑的三个示例,但到目前为止,值保持不变并且数据集没有接收到更改:

BindingContext(Me.DsEmployee.Tables.Item("Me.DsEmployee.spGetEmployee(0)")).EndCurrentEdit()
BindingContext(Me.DsEmployee.spGetEmployee.Rows(0)).EndCurrentEdit()
BindingContext(Me.DsEmployee).EndCurrentEdit

我毫不怀疑我做错了,但我肯定会很感激。

谢谢!

【问题讨论】:

【参考方案1】:

我进行了几次测试,实际上得到了这个工作。这是我在测试“当前”数据行版本之前需要做的事情:

me.SpGetEmployeeBindingSource.EndEdit()

运行该行代码后,我可以测试 DataRowVersion.Current 中的值,然后我可以看到新值。此外,当我检查 me.dsEmployee.HasChanges 时,它在没有 EndEdit 的情况下返回 False 时返回 True。

【讨论】:

以上是关于无法将绑定控制更改推送到数据集的主要内容,如果未能解决你的问题,请参考以下文章

我如何决定是不是应该使用 Power BI API 将数据推送到我的流数据集或 Azure 流分析?

IL指令集

SAS数据集推送到sql server 数据库 实现代码段

数据绑定

对于 ARM Aarch64 的 NEON 编码,如何将寄存器推送到堆栈?似乎 STMFD 不是 Aarch64 指令集的一部分?

火花数据集的转换