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

En este tutorial se muestra el enlace de datos a controles en un panel de acciones de Word. Los controles muestran una relación principal-detalle entre las tablas de una base de datos de SQL Server.

Se aplica a: la información de este tema se aplica a proyectos de nivel de documento para Word. Para obtener más información, consulte Características disponibles por aplicación de Office lication y tipo de proyecto.

En este tutorial se muestran las tareas siguientes:

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

  • Usar una relación de maestro y detalle para mostrar datos en los controles.

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

Nota:

Es posible que tu 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 se tenga y la configuración que se utilice determinan estos elementos. Para más información, vea Personalizar el IDE de Visual Studio.

Requisitos previos

Necesitará los componentes siguientes para completar este tutorial:

  • Una edición de Visual Studio que incluye las herramientas para desarrolladores de Microsoft Office. Para obtener más información, vea Configurar un equipo para desarrollar soluciones de Office.

  • Word 2013 o Word 2010 .

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

  • Permisos para leer y escribir en la base de datos de SQL Server.

Creación del proyecto

El primer paso es crear un proyecto de tipo Documento de Word.

Para crear un nuevo proyecto

  1. 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 Office en Visual Studio.

    Visual Studio abre el nuevo documento de Word en el diseñador y agrega el proyecto Panel Mis acciones de Word a Explorador de soluciones.

Agregar controles al panel de acciones

Para este tutorial, necesita un control de panel de acciones que contenga controles de Windows Forms enlazados a datos. Agregue un origen de datos al proyecto y arrastre controles desde la ventana Orígenes de datos al control del panel de acciones.

Para agregar un control de panel de acciones

  1. Seleccione el proyecto Panel Mis acciones de Word en 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 de panel de acciones, asígnele el nombre ActionsControl y, a continuación, haga clic en Agregar.

Para agregar un origen de datos al proyecto

  1. Si la ventana Orígenes de datos no está visible, la muestra, en la barra de menús, elija Ver>otros orígenes de datos de Windows.>

    Nota:

    Si Mostrar orígenes de datos no está disponible, haga clic en el documento de Word y vuelva a comprobarlo.

  2. Haga clic en Agregar nuevo origen de datos para iniciar el Asistente para configuración del origen 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 SQL Server de ejemplo Northwind o agregue una nueva conexión mediante el botón Nuevo Conectar ion.

  5. Haga clic en Next.

  6. Desactive la opción para guardar la conexión si está seleccionada 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 Proveedores y Productos .

  9. Haga clic en Finalizar

    El asistente agrega la tabla Proveedores y la tabla Products a la ventana Orígenes de datos. También agrega un conjunto de datos con tipo al proyecto que está visible en Explorador de soluciones.

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

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

  2. Haga clic en la flecha desplegable del nodo Nombre de la compañía y seleccione ComboBox.

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

    Se crea un ComboBox control en el control del panel de acciones. Al mismo tiempo, se agrega un BindingSource objeto denominado SuppliersBindingSource, un adaptador de tabla y un DataSet elemento al proyecto en la bandeja de componentes.

  4. Seleccione SuppliersBindingNavigator en la bandeja Componente y presione Eliminar. No usará en SuppliersBindingNavigator este tutorial.

    Nota:

    Al eliminar SuppliersBindingNavigator , no se quita todo el código que se generó para él. Puede quitar este código.

  5. Mueva el cuadro combinado para que esté 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 un elemento secundario de la tabla Proveedores .

  7. Haga clic en la flecha desplegable del nodo ProductName y seleccione ListBox.

  8. Arrastre ProductName al control del panel de acciones.

    Se crea un ListBox control en el control del panel de acciones. Al mismo tiempo, se agrega un BindingSource adaptador con nombre ProductBindingSource y una tabla al proyecto en la bandeja de componentes.

  9. Mueva el cuadro de lista para que esté bajo la etiqueta y cambie la propiedad Size a 171.95.

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

  11. Haga clic con el Buttonbotón derecho en , haga clic en Propiedades en el menú contextual y cambie las siguientes propiedades.

    Propiedad Valor
    Nombre Insertar
    Texto Insertar
  12. Cambie el tamaño del control de usuario para ajustarse a los controles.

Configuración del origen de datos

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

Para cargar el control con datos

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

    private void ActionsControl_Load(object sender, EventArgs e)
    {
        this.suppliersTableAdapter.Fill(this.northwindDataSet.Suppliers);
        this.productsTableAdapter.Fill(this.northwindDataSet.Products);
    }
    
  2. En C#, debe adjuntar el controlador de eventos al Load evento. Puede colocar este código en el ActionsControl constructor, después de la llamada a InitializeComponent. Para obtener más información sobre cómo crear controladores de eventos, vea How to: Create event handlers in Office projects.

    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 proveedoresBindingSource.

  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 rellenar una tabla en el documento de Word. En primer lugar, cree un procedimiento para dar formato a los encabezados de la tabla y agregue el AddData método para crear y dar formato a una tabla de Word.

Para dar formato a los encabezados de tabla

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

    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

  1. En la ActionsControl clase , escriba un método que creará una tabla si aún no existe y agregue datos desde el panel de acciones a la tabla.

    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 código siguiente al Click controlador de eventos del botón Insertar .

    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 Click evento del botón. Puede colocar este código en el Load controlador de eventos de la ActionsControl clase .

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

Mostrar el panel de acciones

El panel de acciones se vuelve visible una vez agregados los controles.

Para mostrar el panel de acciones

  1. En Explorador de soluciones, haga clic con el botón derecho en ThisDocument.vb o ThisDocument.cs y, a continuación, haga clic en Ver código en el menú contextual.

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

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

    this.ActionsPane.Controls.Add(actions);
    

Prueba de la aplicación

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

Para probar el documento

  1. Presione F5 para ejecutar el proyecto.

  2. Confirme que el panel de acciones está visible.

  3. Seleccione una empresa en el cuadro combinado y compruebe que los elementos del cuadro de lista Productos cambian.

  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. Insertar productos adicionales de varias empresas.

Pasos siguientes

En este tutorial se muestran los conceptos básicos del enlace de datos a controles en un panel de acciones de Word. A continuación, podría realizar las siguientes tareas: