Enlace de datos a controles en soluciones de Office

Puede enlazar controles de Windows Forms y controles host en un documento de Microsoft Office Word o una hoja de cálculo de Microsoft Office Excel a un origen de datos, de forma que los controles de muestren automáticamente los datos. Puede enlazar datos a controles en proyectos de nivel de aplicación y de nivel de documento.

Se aplica a: la información de este tema se aplica a proyectos de nivel de documento y proyectos de complementos de VSTO. Consulte Características disponibles por aplicación de Office lication y tipo de proyecto.

Los controles host extienden objetos que están en los modelos de objetos de Word y Excel, como los controles de contenido de Word y los intervalos con nombre en Excel. Para obtener más información, consulte Información general sobre los elementos host y los controles host.

Los controles de Windows Forms y host utilizan el modelo de enlace de datos de Windows Forms, que admite tanto enlace de datos simple como enlace de datos complejo a orígenes de datos como conjuntos de datos y tablas de datos. Para obtener información completa sobre el modelo de enlace de datos en Formularios Windows Forms, consulte Enlace de datos y Formularios Windows Forms.

Enlace de datos simple

Un enlace de datos simple existe si un control de propiedad se enlaza a un único elemento de datos, como un valor de una tabla de datos. Por ejemplo, el control NamedRange tiene una propiedad Value2 que se puede enlazar a un campo de un conjunto de datos. Cuando se cambia el campo del conjunto de datos, también cambia el valor del intervalo con nombre. Todos los controles host, excepto el control XMLNodes , admiten el enlace de datos simple. El control XMLNodes es una colección y, por tanto, no admite el enlace de datos.

Para realizar un enlace de datos simple a un control host, agregue un elemento Binding a la propiedad DataBindings del control. Un objeto Binding representa el enlace simple entre un valor de propiedad del control y el valor de un elemento de datos.

En el ejemplo siguiente se muestra cómo enlazar la propiedad Value2 a un elemento de datos en un proyecto de nivel de documento.

Binding binding1 = new Binding("Value2", ds, "Customers.Names", true);
namedRange1.DataBindings.Add(binding1);

Para ver tutoriales que muestran un enlace de datos simple, vea Tutorial: Enlace de datos simple en un proyecto de nivel de documento para un proyecto de nivel de documento y Tutorial: Enlace de datos simple en el proyecto de complemento vsTO para un proyecto de complemento de VSTO.

Enlace de datos complejo

El enlace de datos complejo existe cuando una propiedad de control está enlazada a más de un elemento de datos, como varias columnas de una tabla de datos. El control ListObject para Excel es el único control host que admite enlace de datos complejo. También hay muchos controles de Windows Forms que admiten enlace de datos complejo, como el control DataGridView .

Para realizar el enlace de datos complejo, establezca la propiedad DataSource del control a un objeto de origen de datos que sea compatible con el enlace de datos complejo. Por ejemplo, la propiedad DataSource del control ListObject puede estar enlazada a varias columnas de una tabla de datos. Todos los datos de la tabla de datos aparecen en el control ListObject y, como los datos de la tabla de datos cambian, el elemento ListObject también cambia. Para obtener una lista de los orígenes de datos que puede usar para el enlace de datos complejo, consulte Orígenes de datos compatibles con Windows Forms.

En el ejemplo de código siguiente se crea un elemento DataSet con dos objetos DataTable y se rellena una de las tablas con datos. El código enlaza después el elemento ListObject a la tabla que contiene datos. Este ejemplo es para un proyecto de nivel de documento de Excel.

private void ListObject_DataSourceAndMember()
{
    // Create a DataSet and two DataTables.
    DataSet ordersDataSet = new DataSet("ordersDataSet");
    DataTable tableCustomers = new DataTable("Customers");
    DataTable tableProducts = new DataTable("Products");
    ordersDataSet.Tables.Add(tableCustomers);
    ordersDataSet.Tables.Add(tableProducts);

    // Add a data to the Customers DataTable.
    tableCustomers.Columns.Add(new DataColumn("LastName"));
    tableCustomers.Columns.Add(new DataColumn("FirstName"));
    DataRow dr = tableCustomers.NewRow();
    dr["LastName"] = "Chan";
    dr["FirstName"] = "Gareth";
    tableCustomers.Rows.Add(dr);

    // Create a list object.
    Microsoft.Office.Tools.Excel.ListObject list1 = 
        this.Controls.AddListObject(
        this.Range["A1"], "Customers");

    // Bind the list object to the Customers table.
    list1.AutoSetDataBoundColumnHeaders = true;
    list1.DataSource = ordersDataSet;
    list1.DataMember = "Customers";
}

Para ver un tutorial que muestre un enlace de datos complejo, consulte Tutorial: Enlace de datos complejo en un proyecto de nivel de documento para un proyecto de nivel de documento.

Mostrar datos en documentos y libros

En los proyectos de nivel de documento, puede utilizar la ventana Orígenes de datos para agregar controles enlazados a datos a los documentos o libros con facilidad, del mismo modo que los usa para Windows Forms. Para obtener más información sobre el uso de la ventana Orígenes de datos , vea Enlazar controles de Windows Forms a datos en Visual Studio y Agregar nuevos orígenes de datos.

Arrastre controles desde la ventana Orígenes de datos

Cuando se arrastra un objeto a un documento desde la ventana Orígenes de datos , se crea un control en el documento . El tipo de control que se crea depende de si se enlaza una única columna de datos o varias.

Para Excel, se crea un control NamedRange en la hoja de cálculo para cada campo individual y un control ListObject para cada intervalo de datos que incluye varias filas y columnas. Puede cambiar este comportamiento predeterminado si selecciona la tabla o el campo en la ventana Orígenes de datos y elige un control diferente de la lista desplegable.

Se agrega un control ContentControl a los documentos. El tipo del control de contenido depende del tipo de datos del campo que haya seleccionado.

Enlazar datos en proyectos de nivel de documento en tiempo de diseño

En los temas siguientes se muestran ejemplos de enlace de datos en tiempo de diseño:

Enlazar datos en proyectos de complemento de VSTO

En proyectos de complemento de VSTO, solo puede agregar controles en tiempo de ejecución. En los temas siguientes se muestran ejemplos de enlace de datos en tiempo de ejecución:

Actualizar datos enlazados a controles host

El enlace de datos entre un origen de datos y un control host implica una actualización de datos bidireccional. En el enlace de datos simple, los cambios en el origen de datos se reflejan automáticamente en el control host, pero los cambios en el control host necesitan una llamada explícita para actualizar el origen de datos. La razón es que en algunos casos, los cambios en un campo enlazado a datos no se aceptan a menos que vayan acompañados de los cambios en otro campo enlazado a datos. Por ejemplo, podría tener dos campos, uno para la edad y otro para años de experiencia. La experiencia no puede superar la edad. Un usuario no puede actualizar la edad de 50 a 25 y, después, la experiencia de 30 a 10, a menos que realice los cambios al mismo tiempo. Para solucionar este problema, los campos con enlaces de datos simples no se actualizan hasta que las actualizaciones se envíen explícitamente mediante código.

Para actualizar un origen de datos a partir de controles host que habilitan un enlace de datos simple, debe enviar las actualizaciones al origen de datos en memoria (como un elemento DataSet o DataTable) y la base de datos back-end si la solución utiliza una.

No es necesario actualizar explícitamente el origen de datos en memoria cuando se realiza el enlace de datos complejo mediante el control ListObject . En ese caso, los cambios se envían automáticamente al origen de datos en memoria sin nada de código adicional.

Para obtener más información, consulte Cómo: Actualizar un origen de datos con datos de un control host.