可以使用两种方法从DataTable对象中删除DataRow对象:DataRowCollection对象的Remove方法,以及DataRow对象的Delete方法。
Remove方法虽然从 DataRowCollection 中删除了一行,但Delete方法只标记该行以供删除。 当应用程序调用 AcceptChanges 该方法时,将发生实际删除。 使用Delete编程方式可以检查哪些行已标记为要删除,然后再实际删除它们。 当行标记为要删除时,其 RowState 属性将设置为 Delete。
在遍历Delete对象时,切勿在 foreach 循环中调用Remove或DataRowCollection。 Delete 和 Remove 不会修改该集合的状态。
在将 DataSet 或 DataTable 与 DataAdapter 及关系数据源一起使用时,请使用 DataRow 的 Delete 方法来删除该行。 该Delete方法将行在DataSet或DataTable中标记为Deleted,但不会将其删除。 相反,当遇到标记为 DataAdapter 的行时,它会执行其DeleteCommand方法以删除数据源中的行。 然后,可以使用 AcceptChanges 方法永久删除该行。 如果用于 Remove 删除该行,该行将完全从表中删除,但 DataAdapter 不会删除数据源中的行。
Remove
DataRowCollection 方法接受一个参数DataRow,并将其从集合中移除,如以下示例所示。
workTable.Rows.Remove(workRow)
workTable.Rows.Remove(workRow);
相反,以下示例演示如何在 DataRow 上调用 Delete 方法,以将其 RowState 更改为 Deleted。
workRow.Delete
workRow.Delete();
如果行标记为要删除,并且调用 AcceptChanges 对象的方法 DataTable ,则会从 DataTable 中删除该行。 相比之下,如果调用 RejectChanges,则行 RowState 会恢复到被标记为 已删除 之前的状态。
注释
如果RowStateDataRow的添加,这意味着它刚刚被添加到表中,然后将其标记为已删除,则会将其从表中删除。