Estados y versiones de filasRow States and Row Versions

ADO.NET administra las filas de las tablas mediante estados de fila y versiones de fila.ADO.NET manages rows in tables using row states and versions. Un estado de fila indica el estado de una fila; las versiones de fila mantienen los valores almacenados en una fila en cuanto se modifica, incluyendo los valores actuales, originales y predeterminados.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. Por ejemplo, después de realizar una modificación en una columna de una fila, ésta adquiere el estado de fila Modified y dos versiones de fila:Current, que contiene los valores actuales de fila, y Original, que contiene los valores de fila antes de la modificación de la columna.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.

Cada objeto DataRow cuenta con la propiedad RowState que puede examinar para determinar el estado actual de la fila.Each DataRow object has a RowState property that you can examine to determine the current state of the row. En la siguiente tabla se ofrece una breve descripción de los valores de enumeración de RowState.The following table gives a brief description of each RowState enumeration value.

Valor de RowStateRowState value DESCRIPCIÓNDescription
Unchanged No se han hecho cambios desde la última llamada a AcceptChanges o desde que DataAdapter.Fill creó la fila.No changes have been made since the last call to AcceptChanges or since the row was created by DataAdapter.Fill.
Added Se ha agregado la fila a la tabla, pero no se ha llamado a AcceptChanges.The row has been added to the table, but AcceptChanges has not been called.
Modified Se ha cambiado algún elemento de la fila.Some element of the row has been changed.
Deleted Se ha eliminado la fila de una tabla y no se ha llamado a AcceptChanges.The row has been deleted from a table, and AcceptChanges has not been called.
Detached La fila no forma parte de ninguna DataRowCollection.The row is not part of any DataRowCollection. El valor de RowState de una fila recién creada se establece en Detached.The RowState of a newly created row is set to Detached. Una vez que se ha agregado la nueva DataRow a DataRowCollection llamando al método Add, el valor de la propiedad RowState se establece en 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.

También se establece Detached en una fila que se ha quitado de una DataRowCollection con el método Remove, o mediante el método Delete seguido del método 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.

Si se llama a AcceptChanges en un objeto DataSet, DataTable o DataRow, se quitan todas las filas con el estado de fila Deleted.When AcceptChanges is called on a DataSet, DataTable , or DataRow, all rows with a row state of Deleted are removed. Las filas que quedan reciben el estado de fila Unchanged y los valores de la versión de fila Original se sobrescriben con los valores de la versión de fila 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. Si se llama a RejectChanges, se quitan todas las filas con el estado de fila Added.When RejectChanges is called, all rows with a row state of Added are removed. Las filas que quedan reciben el estado de fila Unchanged y los valores de la versión de fila Current se sobrescriben con los valores de la versión de fila 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.

Las distintas versiones de una fila se pueden ver pasando un parámetro DataRowVersion con la referencia de la columna, como se muestra en el ejemplo siguiente.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();  

En la siguiente tabla se ofrece una breve descripción de los valores de enumeración de DataRowVersion.The following table gives a brief description of each DataRowVersion enumeration value.

Valor de DataRowVersionDataRowVersion value DESCRIPCIÓNDescription
Current Valores actuales de la fila.The current values for the row. Esta versión de fila no está disponible para filas con un valor RowState en Deleted.This row version does not exist for rows with a RowState of Deleted.
Default Ésta es la versión de fila predeterminada para una fila determinada.The default row version for a particular row. La versión de fila predeterminada para una fila Added, Modified o Deleted es Current.The default row version for an Added, Modified, or Deleted row is Current. La versión de fila predeterminada para una fila Detached es Proposed.The default row version for a Detached row is Proposed.
Original Valores originales de la fila.The original values for the row. Esta versión de fila no está disponible para filas con un valor RowState en Added.This row version does not exist for rows with a RowState of Added.
Proposed Valores propuestos para la fila.The proposed values for the row. Esta versión de fila existe mientras dura una operación de edición en una fila, o para una fila que no forma parte de una DataRowCollection.This row version exists during an edit operation on a row, or for a row that is not part of a DataRowCollection.

Se puede comprobar si una DataRow tiene una versión de fila concreta llamando al método HasVersion y pasando DataRowVersion como argumento.You can test whether a DataRow has a particular row version by calling the HasVersion method and passing a DataRowVersion as an argument. Por ejemplo, DataRow.HasVersion(DataRowVersion.Original) devolverá false para las filas recién agregadas antes de llamar a AcceptChanges.For example, DataRow.HasVersion(DataRowVersion.Original) will return false for newly added rows before AcceptChanges has been called.

En el siguiente ejemplo de código, se muestran los valores en todas las filas eliminadas de una tabla.The following code example displays the values in all the deleted rows of a table. Las filas Deleted no tienen una versión de fila Current y, por lo tanto, debe pasar DataRowVersion.Original cuando obtenga acceso a los valores de columna.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();  
}  

Vea tambiénSee also