Tutorial: Enlace de datos complejo en un proyecto en el nivel de la aplicación

Puede enlazar datos a controles host y controles de Windows Forms en proyectos de nivel de aplicación. En este tutorial se muestra cómo agregar controles a una hoja de cálculo de Microsoft Office Excel y enlazarlos a datos en tiempo de ejecución.

Se aplica a: la información de este tema se aplica a los proyectos de nivel de aplicación para Excel 2007 y Excel 2010. Para obtener más información, vea Características disponibles por aplicación y tipo de proyecto de Office.

En este tutorial se muestran las tareas siguientes:

  • Agregar un control ListObject a una hoja de cálculo en tiempo de ejecución.

  • Crear un BindingSource que conecta el control a una instancia de un conjunto de datos.

Nota

Es posible que su equipo muestre nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de usuario de Visual Studio incluidos en las instrucciones siguientes. La edición de Visual Studio que se tenga y la configuración que se utilice determinan estos elementos. Para obtener más información, vea Valores de configuración de Visual Studio.

Requisitos previos

Necesita los componentes siguientes para completar este tutorial:

-

Una edición de Visual Studio 2010 que incluye las herramientas para desarrolladores de Microsoft Office. Para obtener más información, vea [Configurar un equipo para desarrollar soluciones de Office](bb398242\(v=vs.100\).md).

Crear un proyecto nuevo

El primer paso es crear un proyecto de complemento para Excel.

Para crear un nuevo proyecto

  • Cree un proyecto de complemento de Excel con el nombre Rellenar hojas de cálculo de una base de datos, utilizando Visual Basic o C#.

    Para obtener más información, vea Cómo: Crear proyectos de Office en Visual Studio.

    Visual Studio abrirá el archivo ThisAddIn.vb o ThisAddIn.cs y agregará el proyecto Rellenar hojas de cálculo de una base de datos al Explorador de soluciones.

Crear un origen de datos

Utilice la ventana Orígenes de datos para agregar un conjunto de datos con tipo al proyecto.

Para agregar un conjunto de datos con tipo al proyecto

  1. En el menú Datos, haga clic en Agregar nuevo elemento.

    Se abrirá el Asistente para la configuración de orígenes de datos.

  2. Haga clic en Base de datos y, a continuación, haga clic en Siguiente.

  3. Si ya existe una conexión con la base de datos AdventureWorksLT, elija esta conexión y, a continuación, haga clic en Siguiente.

    De lo contrario, haga clic en Nueva conexión y utilice el cuadro de diálogo Agregar conexión para crear la nueva conexión. Para obtener más información, vea Cómo: Conectarse a los datos de una base de datos.

  4. En la página Guardar la cadena de conexión en el archivo de configuración de la aplicación, haga clic en Siguiente.

  5. En la página Elija los objetos de base de datos, expanda Tablas y, a continuación, seleccione Address (SalesLT).

  6. Haga clic en Finalizar.

    El archivo AdventureWorksLTDataSet.xsd se agrega al Explorador de soluciones. Este archivo define los siguientes elementos:

    • Un conjunto de datos con tipo denominado AdventureWorksLTDataSet. Este conjunto de datos representa el contenido de la tabla Address (SalesLT) de la base de datos AdventureWorksLT.

    • Un objeto TableAdapter denominado AddressTableAdapter. Este TableAdapter puede usarse para leer y escribir datos en AdventureWorksLTDataSet. Para obtener más información, vea Información general sobre TableAdapter.

    Estos dos objetos se utilizarán más adelante en este tutorial.

Crear controles y enlazarlos a datos

En este tutorial, el control ListObject muestra todos los datos de la tabla que seleccionó en cuanto el usuario abra el libro. El objeto de lista utiliza BindingSource para conectar el control a la base de datos.

Para obtener más información sobre cómo enlazar controles a datos, vea Enlazar datos a controles en soluciones de Office.

Para agregar el objeto de lista, el conjunto de datos y el adaptador de la tabla

  1. En la clase ThisAddIn, declare los controles siguientes para mostrar la tabla Address del conjunto de datos AdventureWorksLTDataSet.

    Private addressListObject As Microsoft.Office.Tools.Excel.ListObject
    Private adventureWorksDataSet As AdventureWorksLTDataSet
    Private addressTableAdapter As AdventureWorksLTDataSetTableAdapters.AddressTableAdapter
    Private addressBindingSource As System.Windows.Forms.BindingSource
    
    private Microsoft.Office.Tools.Excel.ListObject addressListObject;
    private AdventureWorksLTDataSet adventureWorksDataSet;
    private AdventureWorksLTDataSetTableAdapters.AddressTableAdapter addressTableAdapter;
    private System.Windows.Forms.BindingSource addressBindingSource;
    
  2. En el método ThisAddIn_Startup, agregue el código siguiente para inicializar el conjunto de datos y llenarlo con información del conjunto de datos AdventureWorksLTDataSet.

    Me.addressTableAdapter = New AdventureWorksLTDataSetTableAdapters.AddressTableAdapter()
    Me.adventureWorksDataSet = New AdventureWorksLTDataSet()
    Me.addressTableAdapter.Fill(Me.adventureWorksDataSet.Address)
    Me.addressBindingSource = New System.Windows.Forms.BindingSource()
    
    this.addressTableAdapter = new AdventureWorksLTDataSetTableAdapters.AddressTableAdapter();
    this.adventureWorksDataSet = new AdventureWorksLTDataSet();
    this.addressTableAdapter.Fill(this.adventureWorksDataSet.Address);
    this.addressBindingSource = new System.Windows.Forms.BindingSource();
    
  3. Agregue el código siguiente al método ThisAddIn_Startup. Esto genera un elemento host que extiende la hoja de cálculo. Para obtener más información, vea Ampliar documentos de Word y libros de Excel en complementos en el nivel de la aplicación en tiempo de ejecución.

    Nota

    El siguiente ejemplo funciona en proyectos destinados a .NET Framework 4. Para usar este ejemplo en proyectos destinados a .NET Framework 3.5, vea los comentarios del código.

    Dim worksheet As Excel.Worksheet = DirectCast(Me.Application.ActiveWorkbook.Worksheets(1), Excel.Worksheet)
    
    ' Create a workhseet host item for .NET Framework 4 projects.
    Dim extendedWorksheet As Worksheet = Globals.Factory.GetVstoObject(worksheet)
    
    ' For .NET Framework 3.5 projects, use the following code to create a worksheet host item.
    ' Dim extendedWorksheet As Worksheet = worksheet.GetVstoObject()
    
    Excel.Worksheet worksheet = (Excel.Worksheet)this.Application.ActiveWorkbook.Worksheets[1];
    // Create a workhseet host item for .NET Framework 4 projects.
    Worksheet extendedWorksheet = Globals.Factory.GetVstoObject(worksheet);
    
    // For .NET Framework 3.5 projects, use the following code to create a worksheet host item.
    // Worksheet extendedWorksheet = worksheet.GetVstoObject();
    
  4. Cree un rango y agregue el control ListObject.

    Dim cell As Excel.Range = extendedWorksheet.Range("$A$1:$G$5", System.Type.Missing)
    Me.addressListObject = extendedWorksheet.Controls.AddListObject(cell, "list1")
    
    Excel.Range cell = extendedWorksheet.Range["$A$1:$G$5", System.Type.Missing];
    this.addressListObject = extendedWorksheet.Controls.AddListObject(cell, "list1");
    
  5. Enlace el objeto de lista a AdventureWorksLTDataSet utilizando BindingSource. Pase los nombres de las columnas que desea enlazar al objeto de lista.

    Me.addressBindingSource.DataSource = Me.adventureWorksDataSet.Address
    Me.addressListObject.AutoSetDataBoundColumnHeaders = True
    Me.addressListObject.SetDataBinding( _
        Me.addressBindingSource, "", "AddressID", "AddressLine1", _
        "AddressLine2", "City", "StateProvince", "CountryRegion", "PostalCode")
    
    this.addressBindingSource.DataSource = this.adventureWorksDataSet.Address;
    this.addressListObject.AutoSetDataBoundColumnHeaders = true;
    this.addressListObject.SetDataBinding(
        this.addressBindingSource, "", "AddressID", "AddressLine1", 
        "AddressLine2", "City", "StateProvince", "CountryRegion", "PostalCode");
    

Probar el complemento

Al abrir Excel, el control ListObject muestra los datos de la tabla Address del conjunto de datos AdventureWorksLTDataSet.

Para probar el complemento

  • Presione F5.

    Se crea un nuevo control ListObject denominado addressListObject en la hoja de cálculo. Al mismo tiempo, se agregan al proyecto un objeto de conjunto de datos denominado adventureWorksLTDataSet y una clase BindingSource denominada addressBindingSource. El control ListObject se enlaza a BindingSource, que a su vez se enlaza al objeto de conjunto de datos.

Vea también

Tareas

Cómo: Rellenar hojas de cálculo con datos de una base de datos

Cómo: Rellenar documentos con datos de una base de datos

Cómo: Rellenar documentos con datos de servicios

Cómo: Rellenar documentos con datos de objetos

Cómo: Desplazarse por los registros de una base de datos en una hoja de cálculo

Cómo: Actualizar un origen de datos con datos de un control Host

Tutorial: Enlace de datos simple en un proyecto en el nivel del documento

Tutorial: Enlace de datos complejo en un proyecto en el nivel del documento

Referencia

Información general sobre el componente BindingSource

Conceptos

Información general sobre el uso de archivos de bases de datos locales en soluciones de Office

Información general sobre orígenes de datos

Enlazar controles de Windows Forms a datos en Visual Studio

Información general sobre el uso de archivos de bases de datos locales en soluciones de Office

Conectar a los datos en aplicaciones de Windows Forms

Otros recursos

Datos en las soluciones de Office

Enlazar datos a controles en soluciones de Office