Compartir a través de


Vincular dato 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 para que los controles muestren automáticamente los datos. Puede enlazar datos a controles tanto en proyectos de nivel de aplicación como 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 y tipo de proyecto.

Los controles host extienden objetos que se encuentran en los modelos de objetos de Word y Excel, como controles de contenido en Word y rangos 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 usan el modelo de enlace de datos de Windows Forms, que admite el enlace de datos simple y el 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

El enlace de datos simple existe cuando una propiedad de control está enlazada a un único elemento de datos, como un valor de una tabla de datos. Por ejemplo, el NamedRange control tiene una Value2 propiedad que se puede enlazar a un campo de un conjunto de datos. Cuando cambia el campo del conjunto de datos, el valor del intervalo con nombre también cambia. Todos los controles host, excepto para el XMLNodes control, admiten el enlace de datos simple. El XMLNodes control 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 Binding a la propiedad DataBindings del control. Un Binding objeto 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 Value2 propiedad a un elemento de datos de un proyecto de nivel de documento.

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

Para consultar guías paso a paso que demuestran el enlace de datos simple, vea Guía paso a paso: Enlace de datos simple en un proyecto de nivel de documento y Guía paso a paso: Enlace de datos simple en un proyecto de complemento VSTO.

Enlace de datos complejo

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

Para realizar un enlace de datos complejo, establezca la DataSource propiedad del control en un objeto de origen de datos compatible con el enlace de datos complejo. Por ejemplo, la DataSource propiedad del ListObject control se puede enlazar a varias columnas de una tabla de datos. Todos los datos de la tabla de datos aparecen en el ListObject control y, a medida que cambian los datos de la tabla de datos, ListObject también cambian. 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 DataSet objeto con dos DataTable objetos y se rellena una de las tablas con datos. A continuación, el código enlaza el 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 usar la ventana Orígenes de datos para agregar fácilmente controles enlazados a datos a los documentos o libros, de la misma manera que lo hace en 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

Se crea un control en el documento al arrastrar un objeto a él desde la ventana Orígenes de datos . El tipo de control que se crea depende de si está enlazando una sola columna de datos o varias columnas de datos.

Para Excel, se crea un NamedRange control en la hoja de cálculo para cada campo individual y se crea un ListObject control para cada intervalo de datos que incluye varias filas y columnas. Para cambiar este valor predeterminado, seleccione la tabla o el campo en la ventana Orígenes de datos y, a continuación, elija un control diferente en la lista desplegable.

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

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

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

Enlazar datos en los proyectos de complementos VSTO

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

Actualiza datos enlazados a controles del 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 requieren 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 estén acompañados de cambios en otro campo enlazado a datos. Por ejemplo, puede tener dos campos: uno para la edad y otro para los años de experiencia. La experiencia no puede superar la edad. Un usuario no puede actualizar la edad de 50 a 25 y, a continuación, la experiencia de 30 a 10 a menos que realice los cambios al mismo tiempo. Para solucionar este problema, los campos con enlace de datos simples no se actualizan hasta que el código envía explícitamente las actualizaciones.

Para actualizar un origen de datos desde controles de host que permiten la vinculación de datos simple, debe enviar actualizaciones tanto al origen de datos en memoria (por ejemplo, a DataSet o DataTable) como a la base de datos de back-end, si su solución utiliza una.

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

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