Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
ADO.NET administra las filas de las tablas mediante estados de fila y versiones. Un estado de fila indica el estado de una fila; las versiones de fila mantienen los valores almacenados en una fila a medida que se modifican, incluidos los valores actuales, originales y predeterminados. Por ejemplo, después de realizar una modificación en una columna de una fila, la fila tendrá un estado de fila de Modified
y dos versiones de fila: Current
, que contiene los valores de fila actuales y Original
, que contiene los valores de fila antes de modificar la columna.
Cada DataRow objeto tiene una RowState propiedad que se puede examinar para determinar el estado actual de la fila. En la tabla siguiente se proporciona una breve descripción de cada RowState
valor de enumeración.
Valor de RowState | Descripción |
---|---|
Unchanged | No se han realizado cambios desde la última llamada a AcceptChanges o desde que la fila se creó mediante DataAdapter.Fill . |
Added | Se ha agregado la fila a la tabla, pero no se ha llamado a AcceptChanges . |
Modified | Se ha cambiado algún elemento de la fila. |
Deleted | Se ha eliminado la fila de una tabla y no se ha llamado a AcceptChanges . |
Detached | La fila no forma parte de ninguna DataRowCollection . El RowState de una fila recién creada se establece en Detached . Después de agregar el nuevo DataRow al DataRowCollection llamando al método Add , el valor de la propiedad RowState se establece en Added .Detached también se establece para una fila que se ha quitado de un DataRowCollection mediante el método Remove o por el método Delete seguido de AcceptChanges . |
Cuando se invoca AcceptChanges
en un DataSet, DataTable o DataRow, se eliminan todas las filas con un estado de fila Deleted
. Las filas restantes reciben un estado de fila de Unchanged
, y los valores en la versión de fila Original
se sobrescriben con los valores de la versión de fila Current
. Si se llama a RejectChanges
, se quitan todas las filas con el estado de fila Added
. Las filas restantes reciben un estado de fila de Unchanged
, y los valores en la versión de fila Current
se sobrescriben con los valores de la versión de fila Original
.
Puede ver las distintas versiones de una fila pasando un parámetro DataRowVersion con la referencia de columna, como se muestra en el ejemplo siguiente.
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 tabla siguiente se proporciona una breve descripción de cada DataRowVersion
valor de enumeración.
Valor de DataRowVersion | Descripción |
---|---|
Current | Valores actuales de la fila. Esta versión de fila no está disponible para filas con un valor RowState en Deleted . |
Default | Versión de fila predeterminada para una fila determinada. La versión de fila predeterminada para una fila Added , Modified o Deleted es Current . La versión de fila predeterminada para una fila Detached es Proposed . |
Original | Valores originales de la fila. Esta versión de fila no está disponible para filas con un valor RowState en Added . |
Proposed | Valores propuestos para la fila. Esta versión de fila existe durante una operación de edición en una fila o para una fila que no forma parte de .DataRowCollection |
Puede probar si un DataRow
tiene una versión de fila determinada llamando al método HasVersion y pasando un DataRowVersion
como argumento. Por ejemplo, DataRow.HasVersion(DataRowVersion.Original)
devolverá false
para las filas recién agregadas antes de llamar a AcceptChanges
.
En el ejemplo de código siguiente se muestran los valores de todas las filas eliminadas de una tabla. 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.
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();
}