如何找出数据表中哪些行已更改值

How to find out which rows have changed values in a datatable

我想知道我的数据表中的行是否更改了值,如何检查? 我有一个数据表有数据,我通过网格视图对此数据进行了一些更改,所以我可以检查哪些行已更改。

每个 DataRow 都有一个 RowState。当您通过在数据适配器上调用 Fill 来填充 DataTable 时,所有行都从 Unchanged 开始。当您添加一行时,该值将为 Added,当您编辑现有行时,该值将为 Modified,而当您删除现有行时,该值将为 Deleted.

请注意,当您在数据适配器上调用 Fill 时,行最初会添加 AddedRowState,但随后会调用 AcceptChanges 并且它们都将设置为 Unchanged。如果先把AcceptChangesDuringFill设置为False,它们都会保持Added。例如,当您想从一个数据库中检索然后插入到另一个数据库时,这很有用。

当您在数据适配器上调用 Update 以保存更改时,随后调用 AcceptChanges 并且所有 AddedModified 行变为 Unchanged 并且所有 Deleted 行都被删除。如果你先把AcceptChangesDuringUpdate设置成False,它们都会保持原样。例如,当您想要将更改从一个 DataTable 保存到多个表时,这很有用。如果您想继续使用 DataTable.

,您可以手动调用 AcceptChanges

请注意,每个 DataRow 包含其数据的两个版本:原始版本和当前版本。当您从 DataRow 中的字段获取数据时,默认情况下您将获取当前版本,但您可以指定所需的版本。如果 RowStateAdded 那么原始版本是空的,如果 RowStateDeleted 那么当前版本是空的。调用 AcceptChanges 时,当前版本将复制到 AddedModified 行中的原始版本。

您还可以在 DataTable 上调用 GetChanges,这将 return Nothing 或仅包含更改行的新 DataTable。您还可以指定一个或多个 DataRowState 值并仅获取该类型的更改。