Compartir a través de


Edición de datos en conjuntos de datos mediante .NET Framework

Nota:

La DataSet clase y las clases relacionadas son tecnologías heredadas de .NET Framework de principios de los años 2000 que permiten a las aplicaciones trabajar con datos en memoria mientras las aplicaciones están desconectadas de la base de datos. Las tecnologías son especialmente útiles para las aplicaciones que permiten a los usuarios modificar datos y conservar los cambios de nuevo en la base de datos. Aunque los conjuntos de datos son una tecnología probada de éxito, el enfoque recomendado para las nuevas aplicaciones .NET es usar Entity Framework Core. Entity Framework proporciona una manera más natural de trabajar con datos tabulares como modelos de objetos y tiene una interfaz de programación más sencilla.

En este artículo se describe cómo consultar y editar datos en tablas de conjuntos de datos de .NET Framework. Puede editar datos en tablas de datos de forma muy similar a editar las tablas de cualquier base de datos. Puede insertar, actualizar y eliminar registros en la tabla. En un formulario enlazado a datos, puede especificar qué campos son editables por el usuario.

En esos casos, la infraestructura de enlace de datos controla todo el seguimiento de cambios para que los cambios se puedan devolver a la base de datos. Si edita los datos mediante programación y desea devolver los cambios a la base de datos, debe usar objetos y métodos que realicen el seguimiento de cambios.

Además de modificar los datos reales, también puede realizar una consulta en DataTable para devolver filas de datos específicas. Por ejemplo, puede consultar filas individuales, versiones originales o propuestas de filas, filas que cambiaron o filas que contienen errores.

Prerrequisitos

Para usar Visual Studio para consultar y editar datos en conjuntos de datos de .NET Framework, necesita:

Edición de filas en un conjunto de datos

Para editar una fila existente en DataTable, debe localizar el DataRow que desea editar y luego asignar los valores actualizados a las columnas deseadas.

Si no conoce el índice de la fila que desea editar, use el FindBy método para buscar por la clave principal.

NorthwindDataSet.CustomersRow customersRow = 
    northwindDataSet1.Customers.FindByCustomerID("ALFKI");

customersRow.CompanyName = "Updated Company Name";
customersRow.City = "Seattle";

Una vez que conozca el índice de fila, puede usarlo para acceder a la fila y editarla.

northwindDataSet1.Customers[4].CompanyName = "Updated Company Name";
northwindDataSet1.Customers[4].City = "Seattle";

Insertar nuevas filas en un conjunto de datos

Las aplicaciones que usan controles enlazados a datos suelen agregar nuevos registros mediante el botón Agregar nuevo en un control BindingNavigator.

También puede agregar un nuevo registro a un conjunto de datos llamando al NewRow método en .DataTable A continuación, agregue la fila a la DataRow colección (Rows).

NorthwindDataSet.CustomersRow newCustomersRow = 
    northwindDataSet1.Customers.NewCustomersRow();

newCustomersRow.CustomerID = "ALFKI";
newCustomersRow.CompanyName = "Alfreds Futterkiste";

northwindDataSet1.Customers.Rows.Add(newCustomersRow);

Eliminación de registros de una tabla de datos

Puede eliminar un DataRow mediante una llamada al Remove método de DataRowCollectiono llamando al Delete método del DataRow objeto .

El Remove método quita la fila de la colección. Si la aplicación no necesita devolver actualizaciones a un origen de datos, puede quitar registros accediendo directamente a la colección de filas de datos con Remove.

Por el contrario, el Delete método no elimina realmente el DataRow, pero lo marca para su eliminación. La eliminación real se produce cuando se llama al AcceptChanges método . Puede comprobar mediante programación qué filas se marcan para su eliminación antes de eliminarlas realmente.

Para conservar la información que el conjunto de datos necesita para enviar actualizaciones al origen de datos, use el método Delete para quitar DataRow de la tabla de datos. Si tu aplicación usa un TableAdapter o DataAdapter, el método Update elimina las filas que tienen un RowState de Deleted.

En el ejemplo siguiente se muestra cómo llamar al Delete método para marcar la primera fila de la Customers tabla como eliminada:

northwindDataSet1.Customers.Rows[0].Delete();

Nota:

Si obtiene la propiedad count de un DataRowCollection, el recuento resultante incluye los registros que han sido marcados para su eliminación. Para obtener un recuento preciso de registros no marcados para su eliminación, puede recorrer la colección y examinar la RowState propiedad de cada registro. Los registros marcados para su eliminación tienen un RowState de Deleted. Como alternativa, puede crear una vista de datos de un conjunto de datos que filtre según el estado de fila y obtenga la propiedad count de este.

Determinar si hay filas modificadas

Al realizar cambios en los registros de un conjunto de datos, se almacena información sobre esos cambios hasta confirmarlos. Confirmas los cambios al llamar al método AcceptChanges de un conjunto de datos o una tabla de datos, o al método Update de un TableAdapter o un adaptador de datos.

Se realiza un seguimiento de los cambios de dos maneras en cada fila de datos:

  • Cada fila de datos contiene información relacionada con su RowState, por ejemplo Added, Modified, Deletedo Unchanged.

  • Cada fila de datos modificada contiene varias versiones. DataRowVersion incluye la versión original antes de los cambios y la versión actual después de los cambios. Mientras un cambio está pendiente y pueden responder al evento RowChanging, también está disponible una tercera versión propuesta.

Para comprobar si hay filas modificadas, llame al HasChanges método de un conjunto de datos. El método devuelve true si se realizaron cambios en el conjunto de datos. Después de determinar que existen cambios, puede llamar al método GetChanges de un DataSet o DataTable para devolver un conjunto de filas modificadas.

En el ejemplo siguiente se muestra cómo comprobar el valor devuelto del HasChanges método para detectar si hay filas modificadas en NorthwindDataset1.

if (northwindDataSet1.HasChanges()) 
{
    // Changed rows were detected, add appropriate code.
}
else
{
    // No changed rows were detected, add appropriate code.
}

Determinar el tipo de cambios

Para comprobar qué tipo de cambios se realizaron en un conjunto de datos, puede pasar un valor de la DataRowState enumeración al HasChanges método .

En el ejemplo siguiente se muestra cómo comprobar el NorthwindDataset1 conjunto de datos para determinar si se han agregado filas nuevas.

if (northwindDataSet1.HasChanges(DataRowState.Added)) 
{
    // New rows have been added to the dataset, add appropriate code.
}
else
{
    // No new rows have been added to the dataset, add appropriate code.
}

Buscar filas que tienen errores

Al trabajar con columnas individuales y filas de datos, es posible que encuentre errores. Puede comprobar la propiedad HasErrors para determinar si existen errores en un DataSet, DataTable o DataRow.

Si la HasErrors propiedad del conjunto de datos es true, recorre en iteración las colecciones de tablas y, a continuación, a través de las filas, para buscar las filas con los errores.

private void FindErrors() 
{
    if (dataSet1.HasErrors)
    {
        foreach (DataTable table in dataSet1.Tables)
        {
            if (table.HasErrors)
            {
                foreach (DataRow row in table.Rows)
                {
                    if (row.HasErrors)
                    {
                        // Process error here.
                    }
                }
            }
        }
    }
}