C# DataTableRowChanged事件和DataTableRowChanged事件之间的区别是什么

C# DataTableRowChanged事件和DataTableRowChanged事件之间的区别是什么,c#,winforms,datatable,C#,Winforms,Datatable,我正在试图理解数据表的RowChanging和Rowchanged事件之间的区别。我查看了MSDN博客,但没有发现任何实际差异 以下是我得到的: 两者都使用相同的Datarowchangeeventargs:因此它们具有相同的事件数据集。 即,e.Action和e.row 在观察窗口中,我检查了这些事件数据是否有任何变化,但它们是相似的。如果RowChanging中有Cancel,则意味着验证 总而言之,我不明白为什么这两件事的意思是一样的 请澄清我的困惑 这是我的不同之处,我是根据我从答案中得

我正在试图理解数据表的
RowChanging
Rowchanged
事件之间的区别。我查看了MSDN博客,但没有发现任何实际差异

以下是我得到的:

  • 两者都使用相同的
    Datarowchangeeventargs
    :因此它们具有相同的事件数据集。 即,<代码>e.Action和
    e.row
  • 在观察窗口中,我检查了这些事件数据是否有任何变化,但它们是相似的。如果
    RowChanging
    中有Cancel,则意味着验证

    总而言之,我不明白为什么这两件事的意思是一样的

    请澄清我的困惑

    这是我的不同之处,我是根据我从答案中得到的指针找到的

    我在列中添加了几行,并调用了这两个事件。我尝试对Change和changed事件执行e.Row.RejectChanges() 那时我才意识到e.Row实际上是提议的Row。 所以Rejectchanges给了我错误“无法在RowChangeing事件中取消编辑()。 但它允许拒绝在事件中发生。 因此,发生了以下顺序: 1.划船比赛 e、 Action=Added(当我向表中添加多行时) e、 Row.RowState=已分离。 2.行更改事件 e、 动作=添加 e、 Row.RowState=Added(在此处更改并添加到datatable时为红色)

    至于例外情况: 我收到“无法在行更改事件中调用CancelEdit()”

    在rowChanged事件中,我得到“此行已从表中删除,并且没有任何数据。BeginEdit()将允许在此行中创建新数据。”


    请指导我如何处理上述行更改事件异常。

    行更改事件在成功更改数据行后发生

    行更改事件发生在数据行更改期间。这将使您有机会在更改行本身之前执行代码。

    根据:

    DataTable.RowChanging
    事件发生在
    DataRow
    正在更改时

    DataTable.RowChanged
    事件在成功更改
    DataRow
    后发生

    若在更改事件中抛出异常,则可以取消更改。改变 事件可用于在其他表中进行更改,但不能(在简单 (方式)辞职

    是的,两者都包含相同的事件数据,即
    e.Action
    e.Row
    ;但更重要的是,您希望在什么时间点执行什么操作

    表示数据尚未验证的更改事件。因此,如果在此阶段进行任何代码更改,那么如果验证失败,数据可能不会持久。在
    OnChanged
    事件中,您可以根据需要更改代码。

    来自:

    行更改:提交数据表中数据列值或数据行的行状态的更改时发生

    RowChanged:在成功更改DataTable中DataColumn值或DataRow的RowState后发生。在这种情况下,我们可以告诉应用程序下一步将做什么


    ()

    这两个事件都是一个接一个发生的,这是真的,但它们都有相同的事件数据。我的问题是当你可以用一个做同样的事情时,两个事件有什么用。因此,您可以在这两种情况下执行代码,执行任何操作,它们都将是相同的。也许在您考虑的上下文中,您的应用程序将是相同的。但是,您可以在RowChanged事件中引发异常,这将阻止RowChanged事件触发(可能您正在进行某种验证)。如果验证通过,则可以使用RowChanged事件执行所需的任何操作,否则将引发异常。这完全取决于当行被更改时您想要做什么。在某些情况下,它们都可以用来做相同的事情。请注意,一般来说,CLR中的许多对象将包括这些事件对,其中一个事件在对象更改之前用于,另一个事件在更改之后用于。该命令的过去/现在时态应该会提示您这一点。感谢您提供有关检查异常的信息,我尝试了它。然后我意识到区别在哪里。OnChange事件没有得到验证,那么我们如何使验证为假呢。因为它没有e。取消我们怎么做?你可以使用e.Row.AcceptChanges()和e.Row.RejectChanges()。感谢你让我知道使用Accept和RejectChanges,这确实帮助我找到了区别。