Demonstra Passo a passo: A vinculação de dados a controles em um painel de ações do Word

Esta explicação passo a passo demonstra a ligação de dados a controles em um painel de ações no Word de Microsoft Office. Os controles demonstram uma relação mestre/detalhe entre tabelas em um banco de dados de SQL Server.

Aplicável a: As informações neste tópico se aplicam a projetos de nível de documento para Word 2007 e Word 2010. Para obter mais informações, consulte Recursos disponíveis pelo aplicativo do Office e o tipo de projeto.

This walkthrough illustrates the following tasks:

  • Criando um painel de ações com controles Windows Forms que são acoplados a dados.

  • Usando um relacionamento master/detail para exibir os dados nos controles.

  • Mostre o painel de ações quando o aplicativo é aberto.

ObservaçãoObservação

Your computer might show different names or locations for some of the Visual Studio user interface elements in the following instructions. The Visual Studio edition that you have and the settings that you use determine these elements. For more information, see Trabalhando com configurações.

Pré-requisitos

You need the following components to complete this walkthrough:

-

Uma edição do Visual Studio 2010 que inclua as ferramentas de desenvolvedor do Microsoft Office. Para obter mais informações, consulte [Configurando um computador para desenvolver soluções do Office](bb398242\(v=vs.100\).md).
  • Word 2007 ou Word 2010.

  • Acesso a um servidor de banco de dados de exemplo Northwind de SQL Server.

  • Permissões para ler e gravar no banco de dados de SQL Server.

Creating the Project

A primeira etapa é criar um projeto de documento do Word.

Para criar um novo projeto.

  • Crie um projeto de documento do Word com o nome do meu painel de ações do Word. No assistente, selecione criar um novo documento.

    For more information, see Como: Criar projetos do Office em Visual Studio.

    Abre o novo documento do Word no designer de Visual Studio e adiciona o Meu painel de ações do Word de projeto para Solution Explorer.

Adicionar controles ao painel Ações

Para esta explicação, você precisa de um controle do painel de ações que contém a data-bound Windows Forms controls. Adicionar uma fonte de dados ao projeto e em seguida, arraste os controles a partir de Fontes de dados janela para o controle do painel de ações.

Para adicionar um controle de painel de ações

  1. Selecione o Meu painel de ações do Word projeto em Solution Explorer.

  2. On the Project menu, click Add New Item.

  3. No Add New Item caixa de diálogo, selecione Controle do painel de ações, o nome ActionsControle, em seguida, clique em Add.

Para adicionar uma nova fonte de dados ao projeto

  1. Se o Fontes de dados janela não estiver visível, clique em Show Data Sources sobre o dados menu.

    ObservaçãoObservação

    Se Show Data Sources não estiver disponível, clique no documento do Word e verifique novamente.

  2. Clique em Add New Data Source para iniciar o Data Source Configuration Wizard.

  3. Select Database and then click Next.

  4. Selecione uma conexão de dados no banco de dados de SQL Server de exemplo Northwind ou adicionar uma nova conexão usando o Nova conexão botão.

  5. Click Next.

  6. Desmarque a opção para salvar a conexão se estiver selecionada e clique próximo.

  7. Expanda o tabelas nó a os objetos de banco de dados janela.

  8. Marque a caixa de seleção ao lado do fornecedores e produtos tabelas.

  9. Click Finish.

O assistente adiciona o fornecedores tabela e produtos tabela para o Fontes de dados janela. Ele também adiciona um dataset tipado ao seu projeto que está visível no Solution Explorer.

Para adicionar controles do Windows Forms com dados vinculados a um controle de painel de ações

  1. No Fontes de dados janela, expanda o fornecedores tabela.

  2. Clique na seta suspensa na Nome da empresa nó e selecione ComboBox.

  3. Arrastar CompanyName partir do Fontes de dados janela para o controle do painel de ações.

    A ComboBox controle é criado no controle de painel de ações. Ao mesmo tempo, um BindingSource chamado SuppliersBindingSource, um adaptador de tabela e um DataSet são adicionados ao projeto na bandeja do componente.

  4. Selecione SuppliersBindingNavigator na componente bandeja e pressione DELETE. Você não usará o SuppliersBindingNavigator nesta explicação passo a passo.

    ObservaçãoObservação

    Excluindo o SuppliersBindingNavigator não remove todo o código que foi gerado para o proprietário. Você pode remover esse código.

  5. Mover a caixa de combinação para que ela está sob o rótulo e a alteração de tamanho propriedade 171, 21.

  6. No Fontes de dados janela, expanda o produtos tabela, ou seja, um filho a fornecedores tabela.

  7. Clique na seta suspensa na ProductName nó e selecione ListBox.

  8. Arraste ProductName para o controle do painel de ações.

    A ListBox controle é criado no controle de painel de ações. Ao mesmo tempo, um BindingSource chamado ProductBindingSource e um adaptador de tabela são adicionados ao projeto na bandeja do componente.

  9. Move a caixa de listagem para que ela está sob o rótulo e a alteração de tamanho propriedade para 171,95.

  10. Arrastar um Button da Toolbox para o painel de ações de controle e coloque-o abaixo da caixa de listagem.

  11. Com o botão direito do Button, clique em Propriedades no menu de atalho e alterar as propriedades a seguintes.

    Property

    Value

    Name

    Insert

    Text

    Insert

  12. Redimensione o controle de usuário para ajustar os controles.

Configuração da fonte de dados

Para configurar a fonte de dados, adicione código para o Load evento do controle do painel de ações para preencher o controle com dados da DataTablee defina a DataSource e DataMember Propriedades para cada controle.

Para carregar o controle com dados

  1. No Load o manipulador de eventos da ActionsControl classe, adicione o código a seguir.

    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. No C#, você deve anexar o manipulador de eventos para o Load de evento. Você pode colocar esse código de ActionsControl construtor, após a chamada para InitializeComponent. Para obter mais informações sobre como criar manipuladores de eventos, consulte Como: Criar manipuladores de eventos em projetos do Office.

    this.Load += new EventHandler(ActionsControl_Load);
    

Para definir propriedades de vinculação de dados dos controles

  1. Select the CompanyNameComboBox control.

  2. No Propriedades janela, clique no botão à direita da DataSource propriedade e selecione suppliersBindingSource.

  3. Clique no botão à direita da DisplayMember propriedade e selecione CompanyName.

  4. Expanda o DataBindings propriedade, clique no botão à direita da texto propriedade e selecione Nenhum.

  5. Select the ProductNameListBox control.

  6. No Propriedades janela, clique no botão à direita da DataSource propriedade e selecione productsBindingSource.

  7. Clique no botão à direita da DisplayMember propriedade e selecione ProductName.

  8. Expanda o DataBindings propriedade, clique no botão à direita da SelectedValue propriedade e selecione Nenhum.

Adicionando um método para inserir dados em uma tabela.

A próxima tarefa é ler os dados os controles acoplados e preencher uma tabela no documento do Word. Primeiro, crie um procedimento para formatar os títulos na tabela e, em seguida, adicionar o AddData método para criar e formatar uma tabela do Word.

Para formatar os títulos de tabela

  • No ActionsControl classe, criar um método para formatar os títulos de tabela.

    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 criar a tabela

  • No ActionsControl classe, a gravação de um método que irá criar uma tabela se ainda não existir e adicionar dados a partir do painel de ações para a tabela.

    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 inserir texto em uma tabela do Word

  1. Adicione o seguinte código para o Click o manipulador de eventos da Inserir botão.

    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. No C#, você deve criar um manipulador de eventos para o Click o evento do botão. Você pode colocar esse código de Load manipulador de eventos da ActionsControl classe.

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

Mostrando o painel de ações

O painel de ações ficará visível após os controles são adicionados a ele.

Para mostrar o painel de ações

  1. Em Solution Explorer, com o botão direito ThisDocument. vb ou ThisDocument.cse em seguida, clique em Exibir código no menu de atalho.

  2. Criar uma nova instância do controle na parte superior do ThisDocument de classe para que ele se parece com o exemplo a seguir.

    Dim actions As New ActionsControl
    
    private ActionsControl actions = new ActionsControl();
    
  3. Adicione código para o Startup o manipulador de eventos de ThisDocument para que ele se parece com o exemplo a seguir.

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

Testing the Application

Agora você pode testar seu documento para verificar se o painel de ações é exibido quando o documento é aberto. Testar a relação mestre/detalhes dos controles no painel de ações e certifique-se de que os dados são preenchidos em uma palavra da tabela quando o Inserir botão é clicado.

Para testar seu documento.

  1. Pressione F5 para executar seu projeto.

  2. Confirme se o painel de ações está visível.

  3. Selecione uma empresa na caixa de combinação e verifique os itens a produtos a mudança de caixa de lista.

  4. Selecione um produto, clique em Inserir no painel de ações e verificar se os detalhes do produto são adicionados à tabela no Word.

  5. Insira os produtos adicionais de várias empresas.

Próximas etapas

Esta explicação passo a passo mostra noções básicas de ligação de dados a controles em um painel de ações no Word. Here are some tasks that might come next:

Consulte também

Tarefas

Como: Adicionar um painel de ações para documentos do Word

Outros recursos

Visão geral painel Ações

A ligação de dados a controles em soluções do Office