États des lignes et versions des lignesRow States and Row Versions

ADO.NET gère les lignes des tables à l'aide des états et des versions de ligne.ADO.NET manages rows in tables using row states and versions. Un état de ligne indique le statut d'une ligne ; les versions de ligne conservent les valeurs stockées dans une ligne pendant leur modification, notamment les valeurs actuelles, d'origine et par défaut.A row state indicates the status of a row; row versions maintain the values stored in a row as it is modified, including current, original, and default values. Par exemple, une fois qu'une modification a été apportée à une colonne dans une ligne, la ligne possède un état de ligne Modified et deux versions de ligne : Current, qui contient les valeurs de ligne actuelles et Original, qui renferme les valeurs de ligne avant la modification de la colonne.For example, after you have made a modification to a column in a row, the row will have a row state of Modified, and two row versions: Current, which contains the current row values, and Original, which contains the row values before the column was modified.

Chaque objet DataRow a la propriété RowState que vous pouvez examiner pour déterminer l'état actuel de la ligne.Each DataRow object has a RowState property that you can examine to determine the current state of the row. Le tableau suivant fournit une brève description de chacune des valeurs d'énumération RowState.The following table gives a brief description of each RowState enumeration value.

Valeur RowStateRowState value DescriptionDescription
Unchanged Aucune modification n'a été apportée depuis le dernier appel à AcceptChanges ou depuis la création de la ligne par DataAdapter.Fill.No changes have been made since the last call to AcceptChanges or since the row was created by DataAdapter.Fill.
Added La ligne a été ajoutée à la table mais la AcceptChanges n'a pas été appelé.The row has been added to the table, but AcceptChanges has not been called.
Modified Certains éléments de la ligne ont été modifiés.Some element of the row has been changed.
Deleted La ligne a été supprimée d'une table et AcceptChanges n'a pas été appelé.The row has been deleted from a table, and AcceptChanges has not been called.
Detached La ligne ne fait partie d'aucun DataRowCollection.The row is not part of any DataRowCollection. Le RowState d'une ligne nouvellement créée prend la valeur Detached.The RowState of a newly created row is set to Detached. Une fois le DataRow ajouté au DataRowCollection à l'aide de l'appel à la méthode Add, la propriété RowState prend la valeur Added.After the new DataRow is added to the DataRowCollection by calling the Add method, the value of the RowState property is set to Added.

Detached est également défini pour une ligne qui a été supprimée d'un DataRowCollection à l'aide de la méthode Remove ou par la méthode Delete suivie de la méthode AcceptChanges.Detached is also set for a row that has been removed from a DataRowCollection using the Remove method, or by the Delete method followed by the AcceptChanges method.

Lorsque AcceptChanges est appelé sur un DataSet, DataTable, ou sur un DataRow, toutes les lignes avec un état de ligne Deleted sont supprimées.When AcceptChanges is called on a DataSet, DataTable , or DataRow, all rows with a row state of Deleted are removed. Un état de ligne Unchanged est attribué aux autres lignes et les valeurs de la version de ligne Original sont remplacées par celles de la version de ligne Current.The remaining rows are given a row state of Unchanged, and the values in the Original row version are overwritten with the Current row version values. Lorsque RejectChanges est appelé, toutes les lignes avec un état de ligne Added sont supprimées.When RejectChanges is called, all rows with a row state of Added are removed. Un état de ligne Unchanged est attribué aux autres lignes et les valeurs de la version de ligne Current sont remplacées par celles de la version de ligne Original.The remaining rows are given a row state of Unchanged, and the values in the Current row version are overwritten with the Original row version values.

Vous pouvez afficher les différentes versions de ligne d'une ligne en passant un paramètre DataRowVersion avec la référence de colonne, comme le montre l'exemple suivant.You can view the different row versions of a row by passing a DataRowVersion parameter with the column reference, as shown in the following example.

Dim custRow As DataRow = custTable.Rows(0)  
Dim custID As String = custRow("CustomerID", DataRowVersion.Original).ToString()  
DataRow custRow = custTable.Rows[0];  
string custID = custRow["CustomerID", DataRowVersion.Original].ToString();  

Le tableau suivant fournit une brève description de chacune des valeurs d'énumération DataRowVersion.The following table gives a brief description of each DataRowVersion enumeration value.

Valeur DataRowVersionDataRowVersion value DescriptionDescription
Current Les valeurs actuelles de la ligne.The current values for the row. Cette version de ligne n'existe pas pour les lignes ayant un RowState``Deleted.This row version does not exist for rows with a RowState of Deleted.
Default Version de ligne par défaut d'une ligne particulière.The default row version for a particular row. La version de ligne par défaut d'une ligne Added, Modified ou Deleted est Current.The default row version for an Added, Modified, or Deleted row is Current. La version de ligne par défaut d'une ligne Detached est Proposed.The default row version for a Detached row is Proposed.
Original Les valeurs d'origine de la ligne.The original values for the row. Cette version de ligne n'existe pas pour les lignes ayant un RowState``Added.This row version does not exist for rows with a RowState of Added.
Proposed Les valeurs proposées de la ligne.The proposed values for the row. Cette version de ligne existe pendant une opération de modification sur une ligne ou pour une ligne qui ne fait pas partie d'un DataRowCollection.This row version exists during an edit operation on a row, or for a row that is not part of a DataRowCollection.

Vous pouvez vérifier si un DataRow possède une version de ligne particulière en appelant la méthode HasVersion et en transmettant un DataRowVersion comme argument.You can test whether a DataRow has a particular row version by calling the HasVersion method and passing a DataRowVersion as an argument. Par exemple, DataRow.HasVersion(DataRowVersion.Original) retournera la valeur false pour des lignes qui ont été ajoutées avant l'appel à la méthode AcceptChanges.For example, DataRow.HasVersion(DataRowVersion.Original) will return false for newly added rows before AcceptChanges has been called.

L'exemple de code suivant affiche les valeurs dans toutes les lignes supprimées d'une table.The following code example displays the values in all the deleted rows of a table. Les lignes Deleted n'ont pas de version de ligne Current, vous devez donc passer DataRowVersion.Original lors de l'accès aux valeurs de colonne.Deleted rows do not have a Current row version, so you must pass DataRowVersion.Original when accessing the column values.

Dim catTable As DataTable = catDS.Tables("Categories")  
  
Dim delRows() As DataRow = catTable.Select(Nothing, Nothing, DataViewRowState.Deleted)  
  
Console.WriteLine("Deleted rows:" & vbCrLf)  
  
Dim catCol As DataColumn  
Dim delRow As DataRow  
  
For Each catCol In catTable.Columns  
  Console.Write(catCol.ColumnName & vbTab)  
Next  
Console.WriteLine()  
  
For Each delRow In delRows  
  For Each catCol In catTable.Columns  
    Console.Write(delRow(catCol, DataRowVersion.Original) & vbTab)  
  Next  
  Console.WriteLine()  
Next  
DataTable catTable = catDS.Tables["Categories"];  
  
DataRow[] delRows = catTable.Select(null, null, DataViewRowState.Deleted);  
  
Console.WriteLine("Deleted rows:\n");  
  
foreach (DataColumn catCol in catTable.Columns)  
  Console.Write(catCol.ColumnName + "\t");  
Console.WriteLine();  
  
foreach (DataRow delRow in delRows)  
{  
  foreach (DataColumn catCol in catTable.Columns)  
    Console.Write(delRow[catCol, DataRowVersion.Original] + "\t");  
  Console.WriteLine();  
}  

Voir aussiSee also