【问题标题】:What is the difference between DatatableRowchanging Event and DataTableRowChanged EventDatatableRowChanged 事件和 DataTableRowChanged 事件有什么区别
【发布时间】:2013-06-04 18:47:18
【问题描述】:

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

这是我得到的:

  1. 两者都使用相同的Datarowchangeeventargs:因此它们具有相同的事件数据集。 即; e.Actione.row

在监视窗口中,我检查了这些事件数据是否有任何更改,但它们相似。如果 RowChanging 中有 Cancel ,那么这意味着验证。

总而言之,我很困惑为什么这两个事件的意思相同。

请解开我的困惑。

这是我的区别,这是我根据从答案中得到的指针发现的。

我在列中添加了几行并调用了这两个事件。我尝试对更改和更改事件执行 e.Row.RejectChanges() 那是我意识到 e.Row 实际上是建议的行的时候。 所以 Rejectchanges 给了我错误“不能在行更改事件中取消编辑()”。 但它允许在 RowChanged 事件中发生拒绝。 所以发生了以下顺序: 1.换行事件 e.Action=Added(因为我正在向表中添加多行) e.Row.RowState=分离。 2. RowChanged 事件 e.Action=添加 e.Row.RowState=已添加(红色,因为此处已更改并添加到数据表中)

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

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

请指导我上面的行更改事件异常。

【问题讨论】:

    标签: c# winforms datatable


    【解决方案1】:

    RowChanged 事件发生在成功更改 DataRow 之后。

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

    【讨论】:

    • 两者都一个接一个地发生,但它们都具有相同的事件数据。我的问题是当你可以对一个事件做同样的事情时,两个事件有什么用。因此,您可以在两者中执行代码并执行任何操作,它们都是相同的。
    • 也许在您所想的上下文中,您的应用程序将是相同的。但是,您可以在 RowChanging 事件中引发异常,这将阻止 RowChanged 事件触发(也许您正在执行某种验证)。如果验证通过,您可以使用 RowChanged 事件来执行您需要的任何操作,否则抛出异常。这完全取决于您在更改行时想要做什么。在某些情况下,它们都可以用来做同样的事情。
    • 请注意,通常 CLR 中的许多对象将包括这些事件对,其中一个事件用于对象更改之前,另一个事件用于更改之后。命令的过去/现在时态应该会提示您。
    • 感谢有关检查异常的信息,我试过了。然后我意识到区别在哪里。
    【解决方案2】:

    根据MSDN

    DataTable.RowChanging 事件在DataRow 发生变化时发生。

    同时

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

    如果您在更改事件中抛出异常,您可以撤销更改。改变了 您可以用来在其他表中进行更改但您不能使用的事件(简单来说 方式)辞职。

    是的,True 都包含相同的事件数据,即e.Actione.Row;但更重要的是你想在什么时间点做什么操作。

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

    【讨论】:

    • Onchange 事件未验证,那么我们如何使验证为假。既然还没有 e.Cancel 我们怎么做呢?
    • 您可以为此使用 e.Row.AcceptChanges() AND e.Row.RejectChanges()。
    • 感谢您让我知道使用接受和拒绝更改,这无疑帮助我找到了差异。
    【解决方案3】:

    来自MSDN

    RowChanging :在为 DataTable 中的 DataColumn 值或 DataRow 的 RowState 提交更改时发生。

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

    (example here)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-27
      • 2012-09-07
      • 1970-01-01
      • 2014-03-12
      • 2011-02-11
      • 2013-03-04
      • 2010-11-09
      • 2013-08-29
      相关资源
      最近更新 更多