【问题标题】:Detecting when a row has changed in a dataset/datatable检测数据集/数据表中的行何时更改
【发布时间】:2009-10-16 13:38:49
【问题描述】:

我正在尝试向我的 C# winforms 应用程序添加一些额外的日志记录。我有一些数据绑定表单,所有数据库内容都由绑定源和一些类型化的数据集/适配器管理。

使用这种设置,很难判断什么时候发生了变化,我必须管理每个字段并保持其以前的值。有没有办法可以连接到数据集并判断什么时候发生了变化?我知道 datarow 有一个 RowState 枚举,这是一个很好的起点吗?我查看了绑定源的 DataMemberChanged 事件,但它从未触发过......

【问题讨论】:

    标签: c# .net winforms data-binding


    【解决方案1】:

    要获取更新后的数据值的原始值,您可以这样做:

    <DataTableRow>[<DataColumn>, DataRowVersion.Original]
    

    【讨论】:

    • 我希望我能将功劳分成正确的答案...谢谢!
    • 这是很好的信息。谢谢你!我自己会用那个。我希望我能为此投票不止一次。
    【解决方案2】:

    要了解发生了什么变化,请查看DataSet.GetChanges method。该示例显示了如何获取更改并通过它们。我还有一个 old example here 使用 DataTable 并显示如何在合并后进行比较。它检查 RowState 并显示更改的值等。它位于页面底部附近,并且它在 VB 中,因为 OP 使用的是它,而不是 C#。我现在要出去了,所以我无法提供等效的翻译,但从中收集一些有用的技术应该很简单。

    【讨论】:

      【解决方案3】:

      您可以使用 RowChanged 事件、RowChanging 事件或由 DataTable 引发的任何 other events

      【讨论】:

      • 这些也会给我以前的值吗?还是要求太多?
      • 我认为不会。我知道您可以通过调用 RejectChanges 将行恢复到之前的值来回滚更改。
      • 我能知道哪一列发生了变化吗?
      • 我可以对数据库进行快速查询以获取行并检查它...,但这可能很昂贵。如果更新查询先执行,则可能不是万无一失的。
      • @Malfist:ColumnChanging 事件可用于确定哪一列正在发生变化以及建议的新值是什么。
      猜你喜欢
      • 2013-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-12
      • 2015-09-10
      • 1970-01-01
      • 2014-10-29
      • 1970-01-01
      相关资源
      最近更新 更多