Compartir a través de


Tutorial: Enlazar datos a controles en un panel de acciones de Word

Actualización: noviembre 2007

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.

Tipo de proyecto

  • Proyectos de nivel de documento

Versión de Microsoft Office

  • Word 2007

  • Word 2003

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

En este tutorial se muestra cómo enlazar datos a los controles en un panel de acciones de Microsoft Office Word. Los controles muestran una relación principal-detalle entre las tablas de una base de datos de SQL Server.

Este tutorial ilustra las tareas siguientes:

  • Crear un panel de acciones con controles de formularios Windows Forms enlazados a datos.

  • Utilizar una relación principal-detalle para mostrar datos en los controles.

  • Mostrar el panel de acciones cuando se abre la aplicación.

Nota:

Es posible que su equipo muestre nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de usuario de Visual Studio en las siguientes instrucciones. La edición de Visual Studio que tenga y la configuración que esté utilizando 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:

  • Visual Studio Tools para Office (componente opcional de Visual Studio 2008 Professional y Visual Studio Team System).

  • Microsoft Office Word 2003 o Microsoft Office Word 2007.

  • Acceso a un servidor con la base de datos de ejemplo Northwind de SQL Server.

  • Permisos de lectura y escritura en la base de datos de SQL Server.

Visual Studio Tools para Office se instala, de forma predeterminada, con las versiones que se enumeran de Visual Studio. Para comprobar si está instalado, consulte Instalar Visual Studio Tools para Office.

Crear el proyecto

El primer paso es crear el proyecto de documento de Word.

Para crear un nuevo proyecto

  • Cree un proyecto de documento de Word con el nombre Mi panel de acciones de Word. En el asistente, seleccione Crear un nuevo documento.

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

    Visual Studio abre el nuevo documento de Word en el diseñador y agrega el proyecto Mi panel de acciones de Word al Explorador de soluciones.

Agregar controles al panel de acciones

Para este tutorial, necesitará un control del panel de acciones que contenga controles de formularios Windows Forms enlazados a datos. Agregue un origen de datos al proyecto y, a continuación, arrastre los controles de la ventana Orígenes de datos al control del panel de acciones.

Para agregar un control del panel de acciones

  1. Seleccione el proyecto Mi panel de acciones de Word en el Explorador de soluciones.

  2. En el menú Proyecto, haga clic en Agregar nuevo elemento.

  3. En el cuadro de diálogo Agregar nuevo elemento, seleccione Control del panel de acciones, asígnele el nombre ActionsControl y, a continuación, haga clic en Agregar.

Para agregar un nuevo origen de datos al proyecto

  1. Si la ventana Orígenes de datos no está visible, haga clic en Mostrar orígenes de datos en el menú Datos.

    Nota:

    Si la opción Mostrar orígenes de datos no está disponible, haga clic en el documento de Word y compruébelo de nuevo.

  2. Haga clic en Agregar nuevo origen de datos para iniciar el Asistente para configuración de orígenes de datos.

  3. Seleccione Base de datos y, a continuación, haga clic en Siguiente.

  4. Seleccione una conexión de datos a la base de datos de ejemplo Northwind de SQL Server o agregue una nueva conexión mediante el botón Nueva conexión.

  5. Haga clic en Siguiente.

  6. Si estuviera activada, desactive la opción de guardar la conexión y, a continuación, haga clic en Siguiente.

  7. Expanda el nodo Tablas en la ventana Objetos de base de datos.

  8. Active la casilla situada junto a las tablas Suppliers y Products.

  9. Haga clic en Finalizar.

El asistente agrega las tablas Suppliers y Products a la ventana Orígenes de datos. También agrega al proyecto un conjunto de datos con tipo, visible en el Explorador de soluciones.

Para agregar controles de formularios Windows Forms enlazados a datos a un control del panel de acciones

  1. En la ventana Orígenes de datos, expanda la tabla Suppliers.

  2. Haga clic en la flecha de lista desplegable en el nodo Company Name y seleccione ComboBox.

  3. Arrastre CompanyName desde la ventana Orígenes de datos al control del panel de acciones.

    A continuación, se creará un control ComboBox en el control del panel de acciones. Al mismo tiempo se agregarán al proyecto, en la bandeja de componentes, un control BindingSource denominado SuppliersBindingSource, un adaptador de tablas y una clase DataSet.

  4. Seleccione SuppliersBindingNavigator en la bandeja de componentes y presione SUPRIMIR. No utilizará SuppliersBindingNavigator en este tutorial.

    Nota:

    Al eliminar SuppliersBindingNavigator, no se elimina todo el código generado para él. Puede quitar este código.

  5. Mueva el cuadro combinado hasta que se encuentre bajo la etiqueta y cambie la propiedad Size a 171, 21.

  6. En la ventana Orígenes de datos, expanda la tabla Products que es secundaria de la tabla Suppliers.

  7. Haga clic en la flecha de lista desplegable en el nodo ProductName y seleccione ListBox.

  8. Arrastre ProductName al control del panel de acciones.

    A continuación, se creará un control ListBox en el control del panel de acciones. Al mismo tiempo se agregarán al proyecto, en la bandeja de componentes, un control BindingSource denominado ProductBindingSource y un adaptador de tablas.

  9. Mueva el cuadro de lista hasta que se encuentre bajo la etiqueta y cambie la propiedad Size a 171,95.

  10. Arrastre el control Button desde el Cuadro de herramientas al control del panel de acciones y colóquelo debajo del cuadro de lista.

  11. Haga clic con el botón secundario en el control Button, haga clic en Propiedades, en el menú de acceso directo, y cambie las siguientes propiedades.

    Propiedad

    Valor

    Name

    Insert

    Text

    Insert

  12. Cambie el tamaño del control de usuario para ajustar los controles.

Configurar el origen de datos

Para configurar el origen de datos, agregue código al evento Load del control del panel de acciones para rellenar el control con datos de la clase DataTable y establezca las propiedades DataSource y DataMember para cada control.

Para cargar el control con datos

  1. En el controlador de eventos Load de la clase ActionsControl, agregue el siguiente código.

    Private Sub ActionsControl_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
        Handles Me.Load
    
        Me.SuppliersTableAdapter.Fill(Me.NorthwindDataSet.Suppliers)
        Me.ProductsTableAdapter.Fill(Me.NorthwindDataSet.Products)
    End Sub
    
    private void ActionsControl_Load(object sender, EventArgs e)
    {
        this.suppliersTableAdapter.Fill(this.northwindDataSet.Suppliers);
        this.productsTableAdapter.Fill(this.northwindDataSet.Products);
    }
    
  2. En C#, debe asociar el controlador de eventos al evento Load. Puede colocar este código en el constructor ActionsControl, después de la llamada a InitializeComponent. Para obtener más información acerca de cómo crear controladores de eventos, vea Cómo: Crear controladores de eventos en Visual Studio Tools para Office.

    this.Load += new EventHandler(ActionsControl_Load);
    

Para establecer las propiedades de enlace de datos de los controles

  1. Seleccione el control CompanyNameComboBox.

  2. En la ventana Propiedades, haga clic en el botón situado a la derecha de la propiedad DataSource y seleccione suppliersBindingSource.

  3. Haga clic en el botón situado a la derecha de la propiedad DisplayMember y seleccione CompanyName.

  4. Expanda la propiedad DataBindings, haga clic en el botón situado a la derecha de la propiedad Text y seleccione Ninguno.

  5. Seleccione el control ProductNameListBox.

  6. En la ventana Propiedades, haga clic en el botón situado a la derecha de la propiedad DataSource y seleccione productsBindingSource.

  7. Haga clic en el botón situado a la derecha de la propiedad DisplayMember y seleccione ProductName.

  8. Expanda la propiedad DataBindings, haga clic en el botón situado a la derecha de la propiedad SelectedValue y seleccione Ninguno.

Agregar un método para insertar datos en una tabla

La siguiente tarea consiste en leer los datos de los controles enlazados y en rellenar una tabla en el documento de Word. En primer lugar, cree un procedimiento para dar formato a los encabezados de la tabla y, a continuación, agregue el método AddData para crear y dar formato a una tabla de Word.

Para dar formato a los encabezados de la tabla

  • En la clase ActionsControl, cree un método para dar formato a los encabezados de la tabla.

    Shared Sub SetHeadings(ByVal tblCell As Word.Cell, ByVal text As String)
    
        With tblCell.Range
            .Text = text
            .Font.Bold = True
            .ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter
        End With
    End Sub
    
    static void SetHeadings(Microsoft.Office.Interop.Word.Cell tblCell, string text)
    {
        tblCell.Range.Text = text;
        tblCell.Range.Font.Bold = 1;
        tblCell.Range.ParagraphFormat.Alignment = 
            Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
    }
    

Para crear la tabla

  • En la clase ActionsControl, escriba un método para crear una tabla si todavía no existe ninguno y agregue los datos del panel de acciones a la tabla.

    Private Sub AddData(ByVal row As System.Data.DataRow, ByVal companyName As String)
    
        ' Create a table if it doesn't already exist.
        If Globals.ThisDocument.Tables.Count = 0 Then
    
            Try
                ' Create a table. 
                Dim tbl As Word.Table = Globals.ThisDocument.Tables.Add( _
                    Globals.ThisDocument.Application.Selection.Range, 1, 4)
    
                ' Insert headings.
                SetHeadings(tbl.Cell(1, 1), "Company Name")
                SetHeadings(tbl.Cell(1, 2), "Product Name")
                SetHeadings(tbl.Cell(1, 3), "Quantity")
                SetHeadings(tbl.Cell(1, 4), "Unit Price")
    
            Catch ex As Exception
                MessageBox.Show("Problem creating Products table: " & ex.Message, _
                    "Actions Pane", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try
        End If
    
        ' Add data from data row to the table.
        Dim selection As Word.Selection = Globals.ThisDocument.Application.Selection
    
        If selection.Tables.Count > 0 Then
    
            Dim newRow As Word.Row = Globals.ThisDocument.Tables(1).Rows.Add()
            With newRow
                .Range.Font.Bold = False
                .Range.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphLeft
                .Cells(4).Range.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphRight
                .Cells(1).Range.Text = companyName
                .Cells(2).Range.Text = row.Item("ProductName").ToString
                .Cells(3).Range.Text = row.Item("QuantityPerUnit").ToString
                .Cells(4).Range.Text = Math.Round(row.Item("UnitPrice"), 2)
            End With
    
        Else
            MessageBox.Show("Cursor must be within a table.", _
                "Actions Pane", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End If
    End Sub
    
    private void AddData(System.Data.DataRow row, string companyName)
    {
        object missing = System.Type.Missing;
    
        // Create a table if it doesn't already exist.
        if (Globals.ThisDocument.Tables.Count == 0)
        {
            try
            {
                // Create a table.
                Microsoft.Office.Interop.Word.Table tbl = Globals.ThisDocument.Tables.Add
                    (Globals.ThisDocument.Application.Selection.Range, 1, 4, ref missing, ref missing);
    
                // Insert headings.
                SetHeadings(tbl.Cell(1, 1), "Company Name");
                SetHeadings(tbl.Cell(1, 2), "Product Name");
                SetHeadings(tbl.Cell(1, 3), "Quantity");
                SetHeadings(tbl.Cell(1, 4), "Unit Price");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Problem creating Products table: " + ex.Message, 
                    "Actions Pane", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    
        // Add data from data row to the table.
        Microsoft.Office.Interop.Word.Selection selection = Globals.ThisDocument.Application.Selection;
    
        if (selection.Tables.Count > 0)
        {
            Microsoft.Office.Interop.Word.Row newRow = Globals.ThisDocument.Tables[1].Rows.Add(ref missing);
    
            newRow.Range.Font.Bold = 0;
    
            newRow.Range.ParagraphFormat.Alignment = 
                Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphLeft;
    
            newRow.Cells[4].Range.ParagraphFormat.Alignment =
                Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphRight;
    
            newRow.Cells[1].Range.Text = companyName;
            newRow.Cells[2].Range.Text = row["ProductName"].ToString();
            newRow.Cells[3].Range.Text = row["QuantityPerUnit"].ToString();
            newRow.Cells[4].Range.Text = Math.Round(Convert.ToDouble(row["UnitPrice"])).ToString("#,##0.00");
        }
        else
        {
            MessageBox.Show("Cursor must be within a table.", 
                "Actions Pane", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }
    

Para insertar texto en una tabla de Word

  1. Agregue el siguiente código al controlador de eventos Click del botón Insert.

    Private Sub Insert_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Insert.Click
    
        Dim tbl As System.Data.DataTable = NorthwindDataSet.Products
        Dim rows() As System.Data.DataRow
    
        ' Check if a product is selected.
        If Not Me.ProductNameListBox.SelectedIndex < 0 Then
    
            Dim product As String = Me.ProductNameListBox.SelectedItem.Row.Item("ProductName")
            Dim company As String = Me.CompanyNameComboBox.Text
    
            ' Return the data row from the selected Product in the list box.
            rows = tbl.Select("[ProductName] = '" & product.Replace("'", "''") & "'")
    
            AddData(rows(0), company)
    
        Else
            MessageBox.Show("Please select a product.", "Actions Pane", MessageBoxButtons.OK)
        End If
    End Sub
    
    private void Insert_Click(object sender, System.EventArgs e)
    {
        System.Data.DataTable tbl = northwindDataSet.Products;
        System.Data.DataRow[] rows;
    
        // Check if a product is selected.
        if (this.productNameListBox.SelectedIndex >= 0)
        {
            System.Data.DataRowView productRow = (System.Data.DataRowView)this.productNameListBox.SelectedItem;
    
            string product = productRow.Row["ProductName"].ToString();
            string company = this.companyNameComboBox.Text;
    
            // Return the data row from the selected product.
            rows = tbl.Select("[ProductName] = '" + product.Replace("'", "''") + "'");
    
            this.AddData(rows[0], company);
        }
        else
        {
            MessageBox.Show("Please select a product.", "Actions Pane", MessageBoxButtons.OK);
        }
    }
    
  2. En C#, debe crear un controlador de eventos para el evento Click del botón. Puede colocar este código en el controlador de eventos Load de la clase ActionsControl.

    this.Insert.Click += new EventHandler(Insert_Click);
    

Mostrar el panel de acciones

El panel de acciones se hace visible tras agregarle los controles.

Para mostrar el panel de acciones

  1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en ThisDocument.vb o ThisDocument.cs y, a continuación, haga clic en Ver código en el menú de acceso directo.

  2. Cree una nueva instancia del control en la parte superior de la clase ThisDocument de modo que tenga un aspecto similar al del ejemplo siguiente.

    Dim actions As New ActionsControl
    
    private ActionsControl actions = new ActionsControl();
    
  3. Agregue código al controlador de eventos Startup de ThisDocument de modo que tenga un aspecto similar al del ejemplo siguiente.

    Me.ActionsPane.Controls.Add(actions)
    
    this.ActionsPane.Controls.Add(actions);
    

Probar la aplicación

Ahora puede probar su documento para comprobar que el panel de acciones aparece cuando se abre el documento. Pruebe la relación principal-detalle en los controles del panel de acciones y asegúrese de que, al hacer clic en el botón Insertar, se rellenan los datos de una tabla de Word.

Para probar el documento

  1. Presione F5 para ejecutar el proyecto.

  2. Confirme que el panel de acciones es visible.

  3. Seleccione una compañía en el cuadro combinado y compruebe que cambian los elementos del cuadro de lista Products.

  4. Seleccione un producto, haga clic en Insertar en el panel de acciones y compruebe que los detalles del producto se agregan a la tabla de Word.

  5. Inserte otros productos de las distintas compañías.

Pasos siguientes

En este tutorial se muestran los aspectos básicos del enlace de datos a los controles de un panel de acciones en Word. Éstas son algunas de las tareas que pueden venir a continuación:

Vea también

Tareas

Cómo: Agregar un panel de acciones a un documento de Word

Conceptos

Información general sobre paneles de acciones

Enlazar datos a controles