Compartir a través de


Adventure Works Data Binding (aplicación de ejemplo de EDM)

El ejemplo AdventureWorks Data Binding muestra al enlace de datos que utiliza Entity Framework. El modelo de datos se define en el tema Modelo AdventureWorks Sales (EDM). Esta aplicación muestra y modifica las entidades SalesOrderDetail asociadas a las entidades SalesOrderHeader. En la ilustración siguiente se muestra el cuadro de diálogo usado para agregar una entidad SalesOrderDetail a una entidad SalesOrderHeader y, en segundo plano, el formulario de la aplicación principal.

Enlazar datos en Entity Framework

El enlace de datos entre una ObjectQuery y un control DataGridView en un formulario de Windows se puede realizar con unas cuantas líneas de código. En primer lugar, cree la ObjectQuery. A continuación, asigne la ObjectQuery a la propiedad DataSource del DataGridView.

El código siguiente asigna una única entidad SalesOrderHeader de la ObjectQuery proporcionada por el ObjectContext de AdventureWorksSalesEntities a un control DataGridView. El parámetro de la consulta se crea analizando el número ID del SalesOrderHeader en un cuadro de texto. Este parámetro se usa en una cláusula where de la consulta para seleccionar un único SalesOrderHeader que coincida con el número de identificador. La consulta se asigna a la propiedad DataSource del control DataGridView. En la ilustración anterior, el segmento de código siguiente rellena el control DataGridView situado en la parte superior del formulario de Windows y cuya etiqueta es Sales Order Header. El uso del método Execute garantiza que la consulta se ejecuta solo una vez.

ObjectParameter parameter =
            new ObjectParameter("p", Int32.Parse(textBoxOrderId.Text));
            dataGridViewSOHeader.DataSource =
                 objCtx.SalesOrderHeader.Where(
                "it.SalesOrderID == @p",
                 parameter).Execute(MergeOption.OverwriteChanges);

En la ilustración anterior, el segmento de código siguiente rellena el control DataGridView cuya etiqueta es Sales Order Details. El SalesOrderHeader tiene una colección de entidades SalesOrderDetail asociadas identificadas por la propiedad SalesOrderDetail de SalesOrderHeader. La propiedad SalesOrderDetail es en realidad una colección EntityCollection. La colección se puede asignar a la propiedad DataSource de un control BindingSource. A continuación, el control BindingSource se asigna a la propiedad DataSource de un control DateGridView.

    if(objCtx.SalesOrderHeader.Where(
                "it.SalesOrderID == @p", parameter).Any())
            {
                SalesOrderHeader resultHeader =
                    objCtx.SalesOrderHeader.Where(
                    "it.SalesOrderID == @p", parameter).First();

                resultHeader.SalesOrderDetail.Load();
                dataGridViewOrderDetails.DataSource = 
                    resultHeader.SalesOrderDetail;
            }

Modificaciones en los escenarios de enlace de datos

Si se realiza un cambio en una de las entidades SalesOrderDetail mostradas en la cuadrícula de datos Sales Order Detail , se deberán actualizar los datos enlazados de SalesOrderHeader una vez que los nuevos datos se hayan guardado en el espacio de almacenamiento. Esto se realiza en un controlador de edición de celdas en la secuencia de código siguiente.

En primer lugar, el método SaveChanges de ObjectContext guarda en el espacio de almacenamiento los cambios realizados en la celda. A continuación, una ObjectQuery recupera la entidad SalesOrderHeader. Finalmente, el método Refresh del ObjectContext actualiza los datos enlazados al DataGridControl. Tenga en cuenta que el parámetro RefreshMode.StoreWins del método Refresh, que especifica dichos datos procedentes de la ubicación de almacenamiento, reemplaza los datos del ObjectContext.

    objCtx.SaveChanges();

    ObjectParameter parameter =
            new ObjectParameter("p", Int32.Parse(textBox1.Text));

    SalesOrderHeader header =
    objCtx.SalesOrderHeader.Where(
           "it.SalesOrderID == @p", parameter).FirstOrDefault();

    // Refresh the SalesOrderHeader in the grid.
    objCtx.Refresh(RefreshMode.StoreWins, header);

Los escenarios de código de este tema son las principales características del enlace de datos de Entity Framework usadas en la aplicación de ejemplo AdventureWorks Data Binding. El código completo se incluye en los temas: Código de la aplicación de ejemplo AdventureWorks Data Binding (aplicación de ejemplo de EDM) y Formulario Add SalesOrderDetail del ejemplo AdventureWorks Data Binding (aplicación de ejemplo de EDM).

Vea también

Conceptos

Modelo AdventureWorks Sales (EDM)
Código de la aplicación de ejemplo AdventureWorks Data Binding (aplicación de ejemplo de EDM)
Formulario Add SalesOrderDetail del ejemplo AdventureWorks Data Binding (aplicación de ejemplo de EDM)