修改行时 HasChanges() 始终为假,除非我调用表单的 BindingContext EndCurrentEdit() 方法
HasChanges() is always false when rows are modified unless I call the form's BindingContext EndCurrentEdit() method
所以我有一个 DataSet
,我填充了它。出于测试目的,它包含一个 DataTable
。这是从 return 是一个 SQL TABLE
的查询中填充的,它有两列,ID
和 Name
。这个table里面有1条记录。
我有一个 TextBox
,我按以下方式绑定:
Dim dv As System.Data.DataView = myDataSet.Tables("MyTable").AsDataView()
dv.RowFilter = "ID=1"
Dim dabi As New Binding("Text", dv, "Name")
txtInput.DataBindings.Add(dabi)
这一切在应用程序中都非常有效! TextBox
使用 DataSet
中的值进行填充,当我在 TextBox
.
中输入内容时,存储在 DataSet
中的值会更新
所以,我在TextBox
中做了一个,然后我去保存它。
我叫myDataSet.HasChanges()
。它 returns False
,尽管我已经进行了更改。研究表明,这与不相信编辑是 'finished' 的行有关,但我不确定这一点,因为我无法找到关于这一切的良好信息来源正在工作。
我还发现如果我在调用 myDataSet.HasChanges()
与以下行:
Me.BindingContext(myDataSet.Tables("MyTable")).EndCurrentEdit()
这是为某种全局绑定上下文调用的方法。我没有对此做任何事情,也没有调用任何 'Begin Edit' 方法等(研究表明这些东西可能是私有的并被隐式调用)。
我的问题是:这是怎么回事?为什么 HasChanges()
需要这条线才能工作?我在我的数据绑定中做错了什么需要这条线吗?该行是否有任何潜在的不可预见的副作用?
编辑: HasChanges()
将正确 return 如果新行 添加 而不调用 EndCurrentEdit()
,只有修改现有行时才会出现此问题。
调用EndCurrentEdit
cause the changes which you made on an IEditableObject
被保存到基础数据源。
自从 DataRowView
的 DataRowView
implements IEditableObject
, calling EndCurrentEdit
of the currency manager cause EndEdit
被调用并提交对基础 DataRow 的更改并结束编辑会话。
此外,当您使用绑定源更改位置或通过单击另一行网格更改位置时,如果实际上您正在更改货币管理器的位置,则调用 EndCurrentEdit
。
所以要提交更改,您应该直接或间接调用 EndCurrentEdit
。
所以我有一个 DataSet
,我填充了它。出于测试目的,它包含一个 DataTable
。这是从 return 是一个 SQL TABLE
的查询中填充的,它有两列,ID
和 Name
。这个table里面有1条记录。
我有一个 TextBox
,我按以下方式绑定:
Dim dv As System.Data.DataView = myDataSet.Tables("MyTable").AsDataView()
dv.RowFilter = "ID=1"
Dim dabi As New Binding("Text", dv, "Name")
txtInput.DataBindings.Add(dabi)
这一切在应用程序中都非常有效! TextBox
使用 DataSet
中的值进行填充,当我在 TextBox
.
DataSet
中的值会更新
所以,我在TextBox
中做了一个,然后我去保存它。
我叫myDataSet.HasChanges()
。它 returns False
,尽管我已经进行了更改。研究表明,这与不相信编辑是 'finished' 的行有关,但我不确定这一点,因为我无法找到关于这一切的良好信息来源正在工作。
我还发现如果我在调用 myDataSet.HasChanges()
与以下行:
Me.BindingContext(myDataSet.Tables("MyTable")).EndCurrentEdit()
这是为某种全局绑定上下文调用的方法。我没有对此做任何事情,也没有调用任何 'Begin Edit' 方法等(研究表明这些东西可能是私有的并被隐式调用)。
我的问题是:这是怎么回事?为什么 HasChanges()
需要这条线才能工作?我在我的数据绑定中做错了什么需要这条线吗?该行是否有任何潜在的不可预见的副作用?
编辑: HasChanges()
将正确 return 如果新行 添加 而不调用 EndCurrentEdit()
,只有修改现有行时才会出现此问题。
调用EndCurrentEdit
cause the changes which you made on an IEditableObject
被保存到基础数据源。
自从 DataRowView
的 DataRowView
implements IEditableObject
, calling EndCurrentEdit
of the currency manager cause EndEdit
被调用并提交对基础 DataRow 的更改并结束编辑会话。
此外,当您使用绑定源更改位置或通过单击另一行网格更改位置时,如果实际上您正在更改货币管理器的位置,则调用 EndCurrentEdit
。
所以要提交更改,您应该直接或间接调用 EndCurrentEdit
。