Partilhar via


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

Você pode vincular controles Windows Forms e controles de host em um documento do Word de Microsoft Office ou uma planilha do Excel de Microsoft Office para uma fonte de dados para os controles exibem automaticamente os dados. Você pode vincular dados a controles em projetos de nível de aplicativo e no nível do documento.

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

Controles de host estendem objetos que estão em modelos de objeto Word e Excel, como, por exemplo, controles de conteúdo no Word e intervalos no Excel nomeados. For more information, see Itens de host e a visão geral sobre controles de Host.

Windows Forms e controles de host usam o modelo de ligação de dados do Windows Forms, que oferece suporte a ambos a ligação de dados simples e a ligação de dados complexos a fontes de dados, como datasets e tabelas de dados. Para obter informações completas sobre o modelo de vinculação de dados no Windows Forms, consulte Ligação de dados e o Windows Forms.

link para vídeo Para uma demonstração de vídeo relacionada, consulte Fazer como i: Consumir o banco de dados no Excel?.

Ligação de dados simples

Ligação de dados simples existe quando uma propriedade do controle é vinculada a um elemento de dados único, como, por exemplo, um valor em uma tabela de dados. Por exemplo, o NamedRange controle tem um Value2 propriedade que pode ser vinculada a um campo em um dataset. Quando o campo no conjunto de dados é alterado, também altera o valor do intervalo nomeado. Todos os host controles, exceto o XMLNodes controle, a vinculação de dados simples de suporte. O XMLNodes o controle é uma coleção e, portanto, ele não suporta vinculação de dados.

Para executar ligação de dados simples para um controle de host, adicione um Binding para o DataBindings() a propriedade do controle. A Binding objeto representa a vinculação simple entre um valor de propriedade do controle e o valor de um elemento de dados.

O exemplo a seguir demonstra como vincular o Value2 propriedade para um elemento de dados em um projeto de nível de documento. Este exemplo de código é parte de um exemplo maior, que é fornecido para o DataBindings() propriedade.

Dim binding1 As New Binding("Value2", ds, "Customers.Names", True)
namedRange1.DataBindings.Add(binding1)
Binding binding1 = new Binding("Value2", ds, "Customers.Names", true);
namedRange1.DataBindings.Add(binding1);

Para instruções passo a passo que demonstra a ligação de dados simples, consulte Demonstra Passo a passo: Ligação de dados simples em um projeto de nível de documento para um projeto de nível do documento e Demonstra Passo a passo: Ligação de dados simples em um projeto de nível de aplicativo para um projeto de nível de aplicativo.

Ligação de dados complexa

Ligação de dados complexa existe quando uma propriedade do controle é vinculada a mais de um elemento de dados, como, por exemplo, várias colunas em uma tabela de dados. O ListObject o controle para o Excel é o único controle de host que oferece suporte à vinculação de dados complexos. Também há muitos controles Windows Forms que suportam a vinculação de dados complexos, como o DataGridView de controle.

Para executar a ligação de dados complexos, defina a DataSource propriedade do controle para um dado da fonte de objeto que é suportado pela vinculação de dados complexos. Por exemplo, o DataSource propriedade da ListObject controle pode ser vinculado a várias colunas em uma tabela de dados. Todos os dados na tabela de dados aparece no ListObject controle e como os dados em que as alterações de tabela de dados, o ListObject também as alterações. Para obter uma lista das fontes de dados que você pode usar para vinculação de dados complexos, consulte Fontes de dados suportados pelo Windows Forms.

O exemplo de código a seguir cria um DataSet com dois DataTable objetos e preenche uma das tabelas com dados. O código, em seguida, vincula a ListObject a tabela que contém dados. Este exemplo é para um projeto de nível de documento do Excel.

    Private Sub ListObject_DataSourceAndMember()
        ' Create a DataSet and two DataTables.
        Dim ordersDataSet As New DataSet("ordersDataSet")
        Dim tableCustomers As New DataTable("Customers")
        Dim tableProducts As New DataTable("Products")
        ordersDataSet.Tables.Add(tableCustomers)
        ordersDataSet.Tables.Add(tableProducts)

        ' Add a data to the Customers DataTable.
        tableCustomers.Columns.Add(New DataColumn("LastName"))
        tableCustomers.Columns.Add(New DataColumn("FirstName"))
        Dim dr As DataRow = tableCustomers.NewRow()
        dr("LastName") = "Chan"
        dr("FirstName") = "Gareth"
        tableCustomers.Rows.Add(dr)

        ' Create a list object.
        Dim List1 As Microsoft.Office.Tools.Excel.ListObject = _
            Me.Controls.AddListObject(Me.Range( _
            "A1"), "Customers")

        ' Bind the list object to the Customers table.
        List1.AutoSetDataBoundColumnHeaders = True
        List1.DataSource = ordersDataSet
        List1.DataMember = "Customers"

    End Sub

private void ListObject_DataSourceAndMember()
{
    // Create a DataSet and two DataTables.
    DataSet ordersDataSet = new DataSet("ordersDataSet");
    DataTable tableCustomers = new DataTable("Customers");
    DataTable tableProducts = new DataTable("Products");
    ordersDataSet.Tables.Add(tableCustomers);
    ordersDataSet.Tables.Add(tableProducts);

    // Add a data to the Customers DataTable.
    tableCustomers.Columns.Add(new DataColumn("LastName"));
    tableCustomers.Columns.Add(new DataColumn("FirstName"));
    DataRow dr = tableCustomers.NewRow();
    dr["LastName"] = "Chan";
    dr["FirstName"] = "Gareth";
    tableCustomers.Rows.Add(dr);

    // Create a list object.
    Microsoft.Office.Tools.Excel.ListObject list1 = 
        this.Controls.AddListObject(
        this.Range["A1", missing], "Customers");

    // Bind the list object to the Customers table.
    list1.AutoSetDataBoundColumnHeaders = true;
    list1.DataSource = ordersDataSet;
    list1.DataMember = "Customers";
}

Para instruções passo a passo que demonstram a ligação de dados complexos, consulte Demonstra Passo a passo: Ligação de dados complexa em um projeto de nível de documento para um projeto de nível do documento e Demonstra Passo a passo: Ligação de dados complexa em um projeto de nível de aplicativo para um projeto de nível de aplicativo.

Exibindo dados em documentos e pastas de trabalho

Em projetos de nível de documento, você pode usar o Fontes de dados janela para adicionar controles ligados a dados para seus documentos ou pastas de trabalho com facilidade, da mesma maneira que você usá-lo para Windows Forms. Para obter mais informações sobre como usar o Fontes de dados janela, consulte Vinculação de controles do Windows Forms a dados em Visual Studio e Janela Fontes de Dados.

Arrastar controles da janela Data Sources

Um controle é criado no documento quando você arrasta um objeto da Fontes de dados janela. O tipo de controle é criado depende se você estiver vinculando a uma única coluna de dados ou de várias colunas de dados.

Para o Excel, um NamedRange controle é criado na planilha para cada campo individual e um ListObject controle é criado para cada intervalo de dados que inclui várias linhas e colunas. Você pode alterar esse padrão, selecionando a tabela ou campo de Fontes de dados janela e, em seguida, escolhendo um controle diferente na lista drop-down.

A ContentControl controle é adicionado a documentos. O tipo de controle de conteúdo depende do tipo de dados do campo que você selecionou.

Vinculação de dados em tempo de Design em projetos de nível de documento

Os tópicos a seguir mostram exemplos de ligação de dados em tempo de design:

Ligação de dados em projetos de nível de aplicativo

Em projetos de nível de aplicativo, você pode adicionar controles somente em tempo de execução. Os tópicos a seguir mostram exemplos de ligação de dados em tempo de execução:

Atualizar dados vinculados a controles de Host

Ligação de dados entre uma fonte de dados e um controle de host envolve uma atualização de dados bidirecional. Vinculação de dados simples, alterações na fonte de dados são refletidas automaticamente no controle de host, mas as alterações no controle de host exigem uma chamada explícita para atualizar a fonte de dados. O motivo é que em alguns casos, as alterações em um campo de data-bound não são aceitos, a menos que eles são acompanhados por alterações em outro campo de data-bound. Por exemplo, você pode ter dois campos, um para a idade e um por anos de experiência. Experiência não pode exceder a idade. Um usuário não é possível atualizar a idade de 50 a 25 e, em seguida, a experiência de 30 para 10, a menos que ele ou ela faz as alterações ao mesmo tempo. Para resolver esse problema, campos de vinculação de dados simples não são atualizados até que as atualizações são explicitamente enviadas pelo código.

Para atualizar uma fonte de dados de controles de host que permitem a ligação de dados simples, você deve enviar atualizações para a fonte de dados na memória (como um DataSet ou DataTable) e o banco de dados back-end, se sua solução usa um.

Você não precisa claramente atualizar a fonte de dados na memória quando você executar a ligação de dados complexa usando o ListObject de controle. Nesse caso, as alterações serão automaticamente enviadas para a fonte de dados na memória sem código adicional.

For more information, see Como: Atualizar uma fonte de dados com dados de um controle de Host.

Consulte também

Tarefas

Como: Criar um controle vinculado a simples em um Windows Form

Como: Atualizar dados usando um TableAdapter

Conceitos

Ligação de dados e o Windows Forms

Vinculação de controles do Windows Forms a dados em Visual Studio

Salvar dados em Datasets

Cache de dados

Outros recursos

Como faço Consumir o banco de dados no Excel?

Concurrency Control in ADO.NET

Dados em soluções do Office