Enlazar datos a controles

Actualización: Julio de 2008

Se aplica a

La información de este tema sólo se aplica a los proyectos y versiones especificados de Visual Studio Tools para Office de Microsoft Office.

Proyectos de nivel de documento

  • Excel 2003

  • Excel 2007

  • Word 2003

  • Word 2007

Proyectos de nivel de aplicación

  • Excel 2007

  • Word 2007

Para obtener más información, consulte Características disponibles por aplicación y tipo de proyecto.

Puede enlazar controles de formularios Windows Forms y controles host de un documento de Microsoft Office Word o de una hoja de cálculo de Microsoft Office Excel a un origen de datos para que muestren los datos automáticamente.

A partir de Visual Studio 2008 Service Pack 1 (SP1), puede enlazar datos a controles en proyectos en el nivel de la aplicación. Si no tiene instalado el SP1, únicamente puede enlazar datos a controles en proyectos en el nivel del documento.

Los controles host extienden objetos que están en el modelo de objetos de Word y de Excel, como los controles de contenido en Word y los rangos con nombre en Excel. Para obtener más información, vea Información general sobre elementos y controles Host.

Tanto los formularios Windows Forms como los controles host utilizan el modelo de enlace de datos de los formularios 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 los formularios Windows Forms, vea Enlace de datos y formularios Windows Forms.

Enlace de datos sencillo

El enlace de datos simple existe cuando una propiedad de control está enlazada a un elemento de datos único, como un valor de una tabla de datos. Por ejemplo, el control NamedRange tiene una propiedad Value2 que se puede enlazar a un campo a un conjunto de datos. Cuando cambia el valor del campo del conjunto de datos, cambia el valor del rango con nombre. Todos los controles host, salvo el control XMLNodes, admiten el enlace de datos simple. El control XMLNodes es una colección y por consiguiente no admite el enlace a datos.

Para hacer un enlace de datos simple a un control host, agregue un control Binding a la propiedad DataBindings del control. Un objeto Binding representa el enlace simple entre un valor de la 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 en el nivel del documento. Este ejemplo de código forma parte de un ejemplo más extenso proporcionado para la propiedad DataBindings.

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

Para ver tutoriales que muestran el enlace de datos simple, vea Tutorial: Enlace de datos simple en un proyecto en el nivel del documento para un proyecto en el nivel del documento y Tutorial: Enlace de datos simple en un proyecto en el nivel de la aplicación para un proyecto en el nivel de la aplicación.

Enlace de datos complejo

El enlace de datos complejo existe cuando una propiedad de un 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 el enlace de datos complejo. También hay muchos controles de formularios Windows Forms que admiten el enlace de datos complejo, como el control DataGridView.

Para realizar el enlace de datos complejo, establezca la propiedad DataSource del control en un objeto de origen de datos compatible con el enlace de datos complejo. Por ejemplo, la propiedad DataSource del control ListObject se puede enlazar a varias columnas de una tabla de datos. Todos los datos de la tabla de datos se muestran en el control ListObject y, a medida que cambian los datos de la tabla de datos, también cambia el control ListObject. Para obtener una lista de los orígenes de datos que puede utilizar para el enlace de datos complejo, vea Orígenes de datos compatibles con formularios Windows Forms.

En el ejemplo de código siguiente se crea DataSet con dos objetos DataTable y se rellena con datos una de las tablas. A continuación, se enlaza ListObject a la tabla que contiene los datos. Este ejemplo es para un proyecto en el nivel del documento de Excel.

Private Sub ListObject_DataSourceAndMember()
    ' Create a DataSet and two DataTables.
    Dim ordersDataSet As New DataSet("ordersDataSet")
    Dim tableCustomers As New DataTable("Customers")
    Dim tableProducts As 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"))
    Dim dr As DataRow = tableCustomers.NewRow()
    dr("LastName") = "Chan"
    dr("FirstName") = "Gareth"
    tableCustomers.Rows.Add(dr)

    ' Create a list object.
    Dim List1 As Microsoft.Office.Tools.Excel.ListObject = _
        Me.Controls.AddListObject(Me.Range( _
        "A1"), "Customers")

    ' Bind the list object to the Customers table.
    List1.AutoSetDataBoundColumnHeaders = True
    List1.DataSource = ordersDataSet
    List1.DataMember = "Customers"

End Sub

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", missing], "Customers");

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

Para ver tutoriales que muestran el enlace de datos complejo, vea Tutorial: Enlace de datos complejo en un proyecto en el nivel del documento para un proyecto en el nivel del documento y Tutorial: Enlace de datos complejo en un proyecto en el nivel de la aplicación para un proyecto en el nivel de la aplicación.

Mostrar datos en documentos y libros

En proyectos en el nivel del documento, puede utilizar la ventana Orígenes de datos para agregar fácilmente controles enlazados a datos a los documentos o a los libros, de la misma forma que se utiliza en los formularios Windows Forms. Para obtener más información sobre el uso de la ventana Orígenes de datos, vea Información general sobre la presentación de datos y Ventana Orígenes de datos.

Arrastrar los controles de la ventana Orígenes de datos

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

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

Para Word 2007, un control ContentControl se agrega a los documentos. El tipo de control de contenido depende del tipo de datos del campo que haya seleccionado. Para Word 2003, un control Bookmark se agrega a los documentos.

Enlazar datos en proyectos en el nivel del 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 en el nivel de la aplicación

En los proyectos en el nivel de la aplicación, únicamente se pueden 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 requieren una llamada explícita para actualizar el origen de datos. Esto se debe a que, en algunos casos, los cambios en un campo enlazado a datos no se aceptan si no van acompañados de cambios en otro campo enlazado a datos. Por ejemplo, se podrían tener dos campos, uno para la edad y otro para años de experiencia. La experiencia no puede ser mayor que 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 resolver este problema, los campos con enlace de datos simple no se actualizan hasta que las actualizaciones se envían explícitamente mediante código.

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

No necesita actualizar explícitamente el origen de datos en memoria al hacer el enlace a datos complejo utilizando el control ListObject. En este caso, los cambios se envían automáticamente al origen de datos en memoria sin necesidad de código adicional.

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

Vea también

Tareas

Cómo: Crear un control con enlace simple en un formulario Windows Forms

Cómo: Actualizar datos utilizando un TableAdapter

Conceptos

Enlace de datos y formularios Windows Forms

Información general sobre la presentación de datos

Información general sobre cómo guardar datos

Almacenar datos en caché

Otros recursos

Control de simultaneidad en ADO.NET

Datos en las soluciones de Office

Historial de cambios

Fecha

Historial

Motivo

Julio de 2008

Agregada información sobre la forma de enlazar datos en complementos en el nivel de la aplicación.

Cambio de características de SP1.