Suppression de DataRow
Il existe deux méthodes pour supprimer un objet DataRow d’un objet DataTable : la méthode Remove de l’objet DataRowCollection, et la méthode Delete de l’objet DataRow. Alors que la méthode Remove supprime un DataRow de DataRowCollection, la méthode Delete marque seulement la ligne pour suppression. La suppression réelle ne se produit que lorsque l'application appelle la méthode AcceptChanges. En utilisant Delete, vous pouvez vérifier par programme les lignes marquées pour suppression avant de les supprimer. Lorsqu'une ligne est marquée pour suppression, sa propriété RowState prend la valeur Delete.
Ni Delete ni Remove ne doivent être appelées dans une boucle foreach lors de l'itération au sein d'un objet DataRowCollection. Ni Delete ni Remove ne modifient l'état de la collection.
Lors de l’utilisation d’un objet DataSet ou d’un DataTable avec un DataAdapter et une source de données relationnelle, utilisez la méthode Delete de DataRow pour supprimer la ligne. La méthode Delete marque la ligne comme Deleted dans le DataSet ou le DataTable, mais ne la supprime pas. Lorsque DataAdapter rencontre une ligne marquée comme Deleted, il exécute sa méthode DeleteCommand pour supprimer la ligne au niveau de la source de données. La ligne peut ensuite être supprimée de manière permanente à l’aide de la méthode AcceptChanges. Si vous utilisez Remove pour supprimer la ligne, celle-ci sera entièrement supprimée de la table, mais DataAdapter ne supprimera pas la ligne au niveau de la source de données.
La méthode Remove du DataRowCollection prend un DataRow comme argument et le supprime de la collection, comme le montre l’exemple suivant.
workTable.Rows.Remove(workRow)
workTable.Rows.Remove(workRow);
Par opposition, l’exemple suivant montre comment appeler la méthode Delete sur un DataRow pour modifier son RowState en Deleted.
workRow.Delete
workRow.Delete();
Si une ligne est marquée pour suppression et si vous appelez la méthode AcceptChanges de l’objet DataTable, la ligne est supprimée du DataTable. Par contre, si vous appelez RejectChanges, le RowState de la ligne revient à la valeur qu'il avait avant d'être marqué comme Deleted.
Notes
Si le RowState d’un DataRow a la valeur Added (indiquant qu'il vient juste d'être ajouté à la table) et s’il est ensuite marqué comme Deleted, il est supprimé de la table.