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,这确实帮助我找到了区别。