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

Essa explicação passo a passo demonstra os dados a controles em um painel de ações em Word.Os controles demonstram um relacionamento mestre/detalhe entre tabelas em um banco de dados SQL Server.

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

Essa explicação passo a passo mostra as seguintes tarefas:

  • Criando um painel de ações com controles de formulários do Windows que são associados a dados.

  • Usando um mestre/detalhes a relação para exibir dados em controles.

  • Mostrar o painel de ações quando o aplicativo é aberta.

ObservaçãoObservação

Seu computador pode mostrar diferentes nomes ou localizações para alguns dos elementos de interface do usuário Visual Studio nas instruções a seguir.A edição Visual Studio que você possui e as configurações que você usa determinam esses elementos.Para obter mais informações, consulte Configurações de Visual Studio.

Pré-requisitos

Para completar este passo-a-passo, são necessários os seguintes componentes:

-

Uma edição do Visual Studio 2012 que inclui o Microsoft Office Developer Tools. Para obter mais informações, consulte [Configurando um computador para desenvolver soluções do Office](bb398242\(v=vs.110\).md).
  • Word 2013 ou Word 2010.

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

  • Permissões leitura e gravação no banco de dados SQL Server.

Criando o projeto

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

Para criar um novo projeto

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

    Para obter mais informações, consulte Como: criar projetos do Office em Visual Studio.

    O Visual Studio abre o novo documento do Word no designer e adiciona o projeto do Meu painel de ações do Word a Gerenciador de Soluções.

Adicionando controles para o painel de ações

Para essa explicação passo a passo, você precisa de um controle do painel ações que contém controles associados a dados do Windows.Adicionar uma fonte de dados ao projeto e em seguida, arraste os controles window de Fontes de Dados ao controle do painel ações.

Para adicionar um controle do painel ações

  1. Selecione o projeto do Meu painel de ações do Word em Gerenciador de Soluções.

  2. No menu Project, clique em Add New Item.

  3. Na caixa de diálogo de Adicionar novo item , Controle do Painel Ações, selecione nomeia-a ActionsControl, e então clique em Adicionar.

Para adicionar uma fonte dados para o projeto

  1. Se a janela de Fontes de Dados não estiver visível, exibi-la por, na barra de menus, escolhendo Modo de Visualização, Outras Janelas, Fontes de Dados.

    ObservaçãoObservação

    Se Mostrar Fontes de Dados não estiver disponível, clique no documento do Word e verifique novamente.

  2. Clique Adicionar Nova Fonte de Dados para iniciar Assistente para Configuração de Fonte de Dados.

  3. Selecione Database e clique em Next.

  4. Selecione uma conexão de dados ao banco de dados SQL Server de exemplo Northwind, ou adicione uma nova conexão usando o botão de Nova Conexão .

  5. Clique em Próximo.

  6. Desmarque a opção para salvar a conexão se está selecionada, e clique em Avançar.

  7. Expanda o nó de Tabelas na janela de Objetos de Banco de Dados .

  8. Selecione a caixa de seleção ao lado das tabelas de Fornecedores e de Produtos .

  9. Clique em Concluir.

O assistente adicione a tabela de Fornecedores e a tabela de Produtos para a janela de Fontes de Dados .Ele também adiciona um dataset tipado ao seu projeto que está visível em Gerenciador de Soluções.

Para adicionar controles associados a dados do Windows a um controle do painel ações

  1. Na janela de Fontes de Dados , expanda a tabela de Fornecedores .

  2. Clique na seta suspensa no nó de Nome da Empresa , e selecione Caixa de Combinação.

  3. Arraste CompanyName da janela de Fontes de Dados ao controle do painel ações.

    Um controle de ComboBox é criado no controle do painel ações.Ao mesmo tempo, BindingSource chamado SuppliersBindingSource, um adaptador da tabela, e DataSet é adicionado ao projeto na bandeja de componentes.

  4. SuppliersBindingNavigator selecione na bandeja de Componente e pressione DELETE.Você não usará SuppliersBindingNavigator nessa explicação passo a passo.

    ObservaçãoObservação

    Excluindo SuppliersBindingNavigator não remove qualquer código que foi gerado para ele.Você pode remover este código.

  5. Mova a caixa de combinação de modo que está sob o rótulo e altere a propriedade de Tamanho a 171, 21.

  6. Na janela de Fontes de Dados , expanda a tabela de Produtos que é um filho da tabela de Fornecedores .

  7. Clique na seta suspensa no nó de ProductName , e selecione Caixa de listagem.

  8. Arrastar ProductName ao controle do painel ações.

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

  9. Mova a caixa de listagem para que esteja sob o rótulo e altere a propriedade de Tamanho a 171,95.

  10. Arraste Button de Caixa de Ferramentas para o controle do painel de ações e coloque-o abaixo da caixa de listagem.

  11. Clique com o botão direito do mouse Button, clique Propriedades no menu de atalho, e altere as propriedades a seguir.

    Propriedade

    Valor

    Nome

    Inserir

    Texto

    Inserir

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

Configurando a fonte de dados

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

Para carregar o controle com dados

  1. No manipulador de eventos de Load da classe de ActionsControl , adicione o seguinte 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. Em C#, você deve anexar um manipulador de eventos para o evento de Load .Você pode colocar esse código no construtor de ActionsControl , após a chamada a 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 associação de dados dos controles

  1. Selecione o controle CompanyNameComboBox.

  2. Na janela de Propriedades , clique no botão para a direita da propriedade de DataSource , e selecione suppliersBindingSource.

  3. Clique no botão para a direita da propriedade para Exibir membro , e selecione CompanyName.

  4. Expanda a propriedade de DataBindings , clique no botão para a direita da propriedade de Texto , e selecione Nenhum.

  5. Selecione o controle ProductNameListBox.

  6. Na janela de Propriedades , clique no botão para a direita da propriedade de DataSource , e selecione productsBindingSource.

  7. Clique no botão para a direita da propriedade para Exibir membro , e selecione ProductName.

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

Adicionando um método para enviar dados de inserção em uma tabela

A tarefa é a seguir lê os dados dos controles associados e preencher uma tabela em seu documento do Word.Primeiro, crie um procedimento para formatar os títulos na tabela, e então adicione o método de AddData para criar e formatar uma tabela de Word.

Para formatar os títulos de tabela

  • Na classe de ActionsControl , crie um método para formatar os títulos da 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

  • Na classe de ActionsControl , gravar um método que cria uma tabela uma se já não existir, e adicione dados do painel ações à 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 de Word

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

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

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

Mostrando o painel de ações

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

Para mostrar o painel de ações

  1. Em Gerenciador de Soluções, clique com o botão direito do mouse ThisDocument.vb ou ThisDocument.cs, clique em Exibir Código no menu de atalho.

  2. Crie uma nova instância do controle na parte superior da classe de ThisDocument de modo que parece com o exemplo a seguir.

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

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

Testando o aplicativo

Agora você pode testar seu documento para verificar que o painel de ações aparece quando o documento está aberto.O teste para o relacionamento mestre/detalhes nos controles no painel ações, e certifique-se de que os dados são preenchidos em uma tabela de Word quando o botão de Inserir é clicado.

Para testar seu documento

  1. Pressione F5 para executar o seu projeto.

  2. Confirme que o painel de ações é visível.

  3. Selecione uma empresa na caixa de combinação e verifique se os itens na caixa de listagem de Produtos foram alterado.

  4. Selecione um produto, clique Inserir no painel ações, e verifique que os detalhes do produto foram adicionados à tabela no Word.

  5. Inserir produtos de várias empresas adicionais.

Próximas etapas

Essa explicação passo a passo mostra as noções básicas de associar dados a controles em um painel de ações em Word.Aqui estão algumas tarefas que podem vie em seguida:

Consulte também

Tarefas

Como: adiciona um painel de ações para documentos do Word ou planilhas do Excel

Outros recursos

Visão geral do painel de ações

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