Chapter 2: Kim’s causal exclusion argument against non-reductivism
2.5 A hidden premise in the exclusion argument
2.5.4 The transference of conserved quantities and the problem of relevance
Después de crear un DataTable en un DataSet, se pueden realizar las mismas actividades que al utilizar una tabla de una base de datos. Se puede agregar, ver, modificar y eliminar datos en la tabla, supervisar los errores y eventos y consultar los datos de la tabla. Al modificar los datos de una DataTable, se puede comprobar si los cambios son precisos y determinar si aceptarlos o rechazarlos mediante programación.
4.1 ADICIÓN DE UNA FILA A UN DATATABLE
Creado el DataTable, se le pueden agregar nuevas filas de datos. Para agregar una nueva fila, declare una nueva variable como tipo DataRow. Se devuelve un nuevo objeto DataRow cuando se llama al método NewRow. En el ejemplo siguiente se muestra cómo se crea una nueva fila llamando al método NewRow.
4.2 BÚSQUEDA UNA FILA EN UN DATATABLE
Para ubicar una Fila en una tabla, utilice el método Find. Éste retorna la fila especificada por el valor de la clave primaria.
El siguiente ejemplo muestra cómo se realiza una búsqueda por el código; si existe, se muestra los datos; sino, se muestra un mensaje.
4.3 ELIMINACIÓN DE UNA FILA EN UN DATATABLE
Existen dos métodos:
Metodo Descripción
Remove Elimina una fila del DataRowCollection
Delete Marca la fila para su eliminación. La eliminación propiamente se
produce al ejecutar el método AcceptChanges
Si se usa Delete, se puede comprobar mediante programación qué filas están marcadas para eliminación antes de eliminarlas. Cuando una fila está marcada para eliminación, su propiedad RowState está establecida en Deleted.
Cuando el DataAdapter encuentra una fila marcada como Deleted, ejecuta el método DeleteCommand para eliminar la fila en el origen de datos. A continuación se puede quitar la fila permanentemente utilizando el método AcceptChanges.
Dim Row As DataRow = dt.NewRow Row(0) = txtcodigo.Text
dt.Rows.Add(Row)
Dim Row As DataRow = dt.Rows.Find(txtcodigo.Text) If Not Row Is Nothing Then
txtdescripcion.Text = Row(1) txtunidad.Text = Row(2) Else
MessageBox.Show("No Existe") End If
92 92 92 92
En el siguiente ejemplo, se muestra cómo se realiza la eliminación de una fila por el método Remove
4.4 ESTADOS Y VERSIONES DE UNA FILA
ADO .NET administra las filas de las tablas mediante:
o Estado de fila indica el estado de una fila.
o Versiones de fila mantienen los valores almacenados en una fila en cuanto se modifica, incluyendo los valores actuales, originales y predeterminados.
Cada objeto DataRow cuenta con la propiedad RowState que puede examinar para determinar el estado actual de la fila. En la tabla siguiente, se describen brevemente los valores de la enumeración RowState.
Estado Descripción
UnChanged No se han hecho cambios desde la última llamada a AcceptChanges.
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. Una vez que se ha agregado la nueva DataRow a la DataRowCollection llamando al método Add, el valor de la propiedad RowState se establece en
Added.
Cuando se llama a AcceptChanges en DataSet, DataTable o DataRow, se quitan todas las filas con el estado de fila Deleted. 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. Si
se llama a RejectChanges, se quitan todas las filas con el estado de fila
Added. 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.
El siguiente ejemplo muestra los registros añadidos, no modificacdos y eliminados (Delete) en un DataTable.
'capturo el indice de la Fila Actual(CurrentRow) del DataGrid Dim i As Integer = Me.DGArticulos.CurrentRow.Index
Dim row As DataRow = dt.Rows(i) dt.Rows.Remove(row)
Dim tabla As DataTable = dt.GetChanges(DataRowState.Added) Dim tabla1 As DataTable = dt.GetChanges(DataRowState.Deleted) Dim tabla2 As DataTable = dt.GetChanges(DataRowState.Unchanged)
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.
Versión Descripción
Current Valores actuales de la fila.
Default
Es la versión de fila predeterminada para una determinada fila. La versión de fila predeterminada para una fila Added, Modified o
Unchanged es Current. Original Valores originales de la fila.
Proposed Valores propuestos para la fila.
Se puede comprobar si una DataRow tiene una versión de fila concreta llamando al método HasVersion y pasando una DataRowVersion como argumento. Ejemplo, DataRow.HasVersion (DataRowVersion.Original) devolverá false para las filas recién agregadas antes de que se llame a
AcceptChanges.
4.5 MÉTODO PARA ACEPTAR O RECHAZAR LOS CAMBIOS EN LA FILAS
Después de comprobar la exactitud de los cambios realizados en un
DataTable, se pueden aceptar con el método AcceptChanges de DataRow, DataTable o DataSet, que configurará los valores de fila Current de modo que sean los valores Original y establecerá la propiedad RowState en Unchanged.
Si se aceptan o se rechazan los cambios, se elimina la información de
RowError y se establece la propiedad HasErrors en false. Aceptar o
rechazar cambios también puede afectar a la actualización de datos en el origen de datos. Si hay restricciones de clave externa en la DataTable, los cambios que se acepten o se rechacen con AcceptChanges y
RejectChanges se propagan a las filas secundarias de la DataRow de
acuerdo con la ForeignKeyConstraint.AcceptRejectRule
En el siguiente ejercicio, si los registros actualizados han generado errores, HasErrors visualizamos el conjunto de errores y deshacemos la actualización RehectChanges, si no hay errores, se procede a actualizar
AcceptChanges.
If dt.HasErrors Then
Dim str As String = ""
For Each row As DataRow In dt.GetErrors str = str + row.RowError + vbCrLf Next MessageBox.Show(str) dt.RejectChanges() End If dt.AcceptChanges()
94 94 94 94