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
Versión de Microsoft Office
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
Seleccione el proyecto Mi panel de acciones de Word en el Explorador de soluciones.
En el menú Proyecto, haga clic en Agregar nuevo elemento.
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
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.
Haga clic en Agregar nuevo origen de datos para iniciar el Asistente para configuración de orígenes de datos.
Seleccione Base de datos y, a continuación, haga clic en Siguiente.
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.
Haga clic en Siguiente.
Si estuviera activada, desactive la opción de guardar la conexión y, a continuación, haga clic en Siguiente.
Expanda el nodo Tablas en la ventana Objetos de base de datos.
Active la casilla situada junto a las tablas Suppliers y Products.
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
En la ventana Orígenes de datos, expanda la tabla Suppliers.
Haga clic en la flecha de lista desplegable en el nodo Company Name y seleccione ComboBox.
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.
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.
Mueva el cuadro combinado hasta que se encuentre bajo la etiqueta y cambie la propiedad Size a 171, 21.
En la ventana Orígenes de datos, expanda la tabla Products que es secundaria de la tabla Suppliers.
Haga clic en la flecha de lista desplegable en el nodo ProductName y seleccione ListBox.
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.
Mueva el cuadro de lista hasta que se encuentre bajo la etiqueta y cambie la propiedad Size a 171,95.
Arrastre el control Button desde el Cuadro de herramientas al control del panel de acciones y colóquelo debajo del cuadro de lista.
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
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
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); }
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
Seleccione el control CompanyNameComboBox.
En la ventana Propiedades, haga clic en el botón situado a la derecha de la propiedad DataSource y seleccione suppliersBindingSource.
Haga clic en el botón situado a la derecha de la propiedad DisplayMember y seleccione CompanyName.
Expanda la propiedad DataBindings, haga clic en el botón situado a la derecha de la propiedad Text y seleccione Ninguno.
Seleccione el control ProductNameListBox.
En la ventana Propiedades, haga clic en el botón situado a la derecha de la propiedad DataSource y seleccione productsBindingSource.
Haga clic en el botón situado a la derecha de la propiedad DisplayMember y seleccione ProductName.
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
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); } }
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
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.
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();
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
Presione F5 para ejecutar el proyecto.
Confirme que el panel de acciones es visible.
Seleccione una compañía en el cuadro combinado y compruebe que cambian los elementos del cuadro de lista Products.
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.
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:
Implementar el proyecto. Para obtener más información, vea Cómo: Implementar soluciones de Office (2003 System).
Enlazar datos a controles de Excel. Para obtener más información, vea Tutorial: Enlazar datos a controles en un panel de acciones de Excel.
Mostrar y ocultar controles en el panel de acciones. Para obtener más información, consulte Tutorial: Cambiar el panel de acciones de acuerdo con el contexto del usuario.
Vea también
Tareas
Cómo: Agregar un panel de acciones a un documento de Word