【问题标题】:DataSet.HasChanges is true even immediately after TableAdapter.Update is run即使在 TableAdapter.Update 运行之后,DataSet.HasChanges 也是 true
【发布时间】:2011-01-26 23:10:13
【问题描述】:

我有一些我正在更新的旧数据集代码。我正在尝试确定数据集是否对其进行了更改,以便我可以正确提示保存请求。但是 myDataset.HasChanges() 总是返回 true。

在我的保存方法中,我编辑了代码以确定数据集何时发生更改,并制作了如下代码:

1. myBindingSource.EndEdit()
2. myTableAdapter.Update(myDataSet)
3. myBindingSource.EndEdit()

在第 1 行之后,-myDataSet.HasChanges = true(可以理解)
第 2 行之后,-myDataSet.HasChanges = false(可以理解)
第 3 行之后,-myDataSet.HasChanges = true

我不确定为什么会在第 3 行出现这种情况,这不应该是错误的,因为我只是在数据集上运行了更新吗?

【问题讨论】:

    标签: .net data-binding dataset tableadapter


    【解决方案1】:

    可能有一个 UI 元素导致 dataSet/dataTable 中的值发生变化。

    在没有任何数据绑定的简单控制台应用程序中尝试您的代码。

    【讨论】:

    • 有些数据绑定项触发了“更改但未更改”数据的事件
    • @NathanKoop 你找到解决办法了吗?我遇到了同样的问题。
    • 如果我没记错的话(那是几年前),我相信我触发了一个 Textbox.OnChange 事件,这会修改其他一些文本框,从而改变数据集。
    • @styfle 扩展一点,我想我最终做的是添加一个 IsSaving 布尔值,在我的事件中我检查了 IsSaving,并忽略了 UI 修改。可能有更好的方法,但我很着急,然后项目继续进行。
    【解决方案2】:

    您的 TableAdapter 是否刷新了您的数据集?如果是这样,那么您可能有一些东西正在初始化(记住,GUID==good,Int==bad)。就像从 TableAdapter 填充时需要调用 AcceptChanges 将所有行的状态重置为未更改一样。

    【讨论】:

    • 我不确定 TableAdapter 是否刷新了数据。它所做的只是一个 UPDATE ... WHERE id = @myId;我尝试在其中添加一个 AcceptChanges(在第 2 行和第 3 行之间),但我仍然得到相同的结果。我正在使用 int(不是我的数据库设计,我无法更改它)。也不应该初始化任何键,在我正在测试的情况下,我加载表单(大量数据绑定等......)然后按下保存按钮而不更改任何数据,这会发生
    猜你喜欢
    • 1970-01-01
    • 2020-10-21
    • 2011-01-31
    • 2012-04-12
    • 2020-06-23
    • 2020-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多