Partilhar via


Arquitetura do componente BindingSource

Com o BindingSource componente, você pode vincular universalmente todos os controles Windows Forms a fontes de dados.

O BindingSource componente simplifica o processo de vinculação de controles a uma fonte de dados e fornece as seguintes vantagens em relação à vinculação de dados tradicional:

  • Permite a vinculação em tempo de design a objetos de negócios.

  • Encapsula a CurrencyManager funcionalidade e expõe CurrencyManager eventos em tempo de design.

  • Simplifica a criação de uma lista que suporta a interface IBindingList, fornecendo notificação de alteração de lista às fontes de dados que não suportam nativamente esse recurso.

  • Fornece um ponto de extensibilidade para o IBindingList.AddNew método.

  • Fornece um nível de indirecionamento entre a fonte de dados e o controle. Essa indireção é importante quando a fonte de dados pode ser alterada em tempo de execução.

  • Interopera com outros controlos do Windows Forms relacionados a dados, especificamente os controlos BindingNavigator e os DataGridView.

Por esses motivos, o BindingSource componente é a maneira preferida de vincular seus controles do Windows Forms a fontes de dados.

Recursos BindingSource

O BindingSource componente fornece vários recursos para vincular controles a dados. Com esses recursos, você pode implementar a maioria dos cenários de vinculação de dados com quase nenhuma codificação de sua parte.

O BindingSource componente faz isso fornecendo uma interface consistente para acessar muitos tipos diferentes de fontes de dados. Isso significa que você usa o mesmo procedimento para vincular a qualquer tipo. Por exemplo, você pode anexar a DataSource propriedade a um DataSet ou a um objeto de negócios e, em ambos os casos, usar o mesmo conjunto de propriedades, métodos e eventos para manipular a fonte de dados.

A interface consistente fornecida pelo componente simplifica BindingSource muito o processo de vinculação de dados aos controles. Para tipos de fonte de dados que fornecem notificação de alteração, o BindingSource componente comunica automaticamente as alterações entre o controle e a fonte de dados. Para tipos de fonte de dados que não fornecem notificação de alteração, são fornecidos eventos que permitem gerar notificações de alteração. A lista a seguir mostra os recursos suportados BindingSource pelo componente:

Indireção

O BindingSource componente fornece um nível de indireção entre um controle e uma fonte de dados. Em vez de vincular um controlador diretamente a uma fonte de dados, vincula o controlador a um BindingSource, e anexa a fonte de dados à propriedade BindingSource do componente DataSource.

Com esse nível de indireção, você pode alterar a fonte de dados sem redefinir a vinculação de controle. Isso lhe dá os seguintes recursos:

Gestão de Moeda

O componente BindingSource implementa a interface ICurrencyManagerProvider para gerir a moeda para você. Com a interface ICurrencyManagerProvider, pode também aceder ao gestor de moedas para um BindingSource, além do gestor de moedas para outro BindingSource vinculado ao mesmo DataMember.

O componente BindingSource encapsula a funcionalidade CurrencyManager e expõe as propriedades e eventos CurrencyManager mais comuns. A tabela a seguir descreve alguns dos membros relacionados ao gerenciamento de moeda.

CurrencyManager property Obtém o gerenciador de moedas associado ao BindingSource.

GetRelatedCurrencyManager método Se houver outro BindingSource associado ao membro de dados especificado, obtém seu gerenciador de moedas.

Current property Obtém o item atual da fonte de dados.

Position property Obtém ou define a posição atual na lista subjacente.

EndEdit método Aplica alterações pendentes à fonte de dados subjacente.

CancelEdit método Cancela a operação de edição atual.

Fonte de dados como uma lista

O componente BindingSource implementa as interfaces IBindingListView e ITypedList. Com essa implementação, você pode usar o BindingSource próprio componente como uma fonte de dados, sem qualquer armazenamento externo.

Quando o componente é anexado BindingSource a uma fonte de dados, ele expõe a fonte de dados como uma lista.

A propriedade DataSource pode ser configurada para várias fontes de dados. Isso inclui tipos, objetos e listas de tipos. A fonte de dados resultante será exposta como uma lista. A tabela a seguir mostra algumas das fontes de dados comuns e a avaliação da lista resultante.

Propriedade DataSource Listar resultados
Uma referência nula (Nothing no Visual Basic) Uma coleção vazia IBindingList de objetos. Adicionar um item define a lista para o tipo do item adicionado.
Uma referência nula (Nothing no Visual Basic) com DataMember definido Não suportado; gera ArgumentException.
Tipo ou objeto não listado do tipo "T" Um objeto vazio IBindingList do tipo "T".
Instância de matriz Um IBindingList contendo os elementos da matriz.
IEnumerable instância Um IBindingList contendo os IEnumerable itens
Listar instância contendo o tipo "T" Uma IBindingList instância que contém o tipo "T".

Além disso, DataSource pode ser definido para outros tipos de lista, como IListSource e ITypedList, e o BindingSource irá manipulá-los adequadamente. Nesse caso, o tipo contido na lista deve ter um construtor sem parâmetros.

BindingSource como um IBindingList

O BindingSource componente fornece membros para acessar e manipular os dados subjacentes como um IBindingList. A tabela a seguir descreve alguns desses membros.

Membro Descrição
List propriedade Obtém a lista que resulta da avaliação das propriedades DataSource ou DataMember.
AddNew método Adiciona um novo item à lista subjacente. Aplica-se a fontes de dados que implementam a IBindingList interface e permitem adicionar itens (ou seja, a AllowNew propriedade é definida como true).

Criação de itens personalizados

Você pode manipular o AddingNew evento para fornecer sua própria lógica de criação de item. O AddingNew evento ocorre antes que um novo objeto seja adicionado ao BindingSource. Esse evento é gerado depois que o AddNew método é chamado, mas antes que o novo item seja adicionado à lista subjacente. Ao manipular esse evento, você pode fornecer um comportamento de criação de item personalizado sem derivar da BindingSource classe. Para obter mais informações, consulte Como personalizar a adição de item com o Windows Forms BindingSource.

Criação de itens transacionais

O componente BindingSource implementa a interface ICancelAddNew, que possibilita a criação de itens transacionais. Depois que um novo item é criado provisoriamente usando uma chamada para AddNew, a adição pode ser confirmada ou revertida das seguintes maneiras:

  • O EndNew método confirmará explicitamente a adição pendente.

  • Executar outra operação de coleção, como uma inserção, remoção ou movimentação, confirmará implicitamente a adição pendente.

  • O CancelNew método irá anular a adição não concluída se o método ainda não tiver sido confirmado.

Suporte IEnumerable

O BindingSource componente permite a vinculação de controles a IEnumerable fontes de dados. Com este componente, podes ligar a uma fonte de dados, como um System.Data.SqlClient.SqlDataReader.

Quando uma IEnumerable fonte de dados é atribuída ao componente BindingSource, o BindingSource cria um IBindingList e adiciona o conteúdo da fonte de dados IEnumerable à lista.

Suporte Design-Time

Alguns tipos de objeto não podem ser criados em tempo de design, como objetos criados a partir de uma classe de fábrica ou objetos retornados por um serviço Web. Às vezes, você pode ter que vincular seus controles a esses tipos em tempo de design, mesmo que não haja nenhum objeto na memória ao qual seus controles possam se ligar. Você pode, por exemplo, precisar rotular os cabeçalhos de coluna de um DataGridView controle com os nomes das propriedades públicas do seu tipo personalizado.

Para dar suporte a este cenário, o componente BindingSource suporta ligação a um Type. Quando atribui um Type à propriedade DataSource, o componente BindingSource cria um BindingList<T> vazio de itens Type. Quaisquer controles que você vincular posteriormente ao BindingSource componente serão alertados para a presença das propriedades ou esquema do seu tipo em tempo de design ou em tempo de execução. Para obter mais informações, consulte Como vincular um controle do Windows Forms a um tipo.

Métodos Estáticos ListBindingHelper

Os tipos System.Windows.Forms.BindingContext, System.Windows.Forms.CurrencyManager e BindingSource têm uma lógica comum para gerar uma lista de um par DataSource/DataMember. Além disso, essa lógica comum é exposta publicamente para uso por autores de controle e outros terceiros nos seguintes static métodos:

Classificação e filtragem com a interface IBindingListView

O BindingSource componente implementa a IBindingListView interface, que estende a IBindingList interface. O IBindingList oferece classificação de coluna única e o IBindingListView oferece classificação e filtragem avançadas. Com IBindingListView, pode ordenar e filtrar itens na fonte de dados, caso essa fonte de dados implemente uma destas interfaces. O componente BindingSource não fornece uma implementação de referência desses membros. Em vez disso, as chamadas são encaminhadas para a lista subjacente.

A tabela a seguir descreve as propriedades usadas para classificar e filtrar.

Membro Descrição
Filter propriedade Se a fonte de dados for um IBindingListView, obtém ou define a expressão usada para filtrar quais linhas são exibidas.
Sort propriedade Se a fonte de dados for um IBindingList, obtém ou define um nome de coluna utilizado para ordenar e determinar a ordem de classificação das informações.

-ou-

Se a fonte de dados for uma IBindingListView e oferecer suporte à classificação avançada, obterá vários nomes de coluna usados para classificação e ordem de classificação

Integração com BindingNavigator

Você pode usar o BindingSource componente para vincular qualquer controle Windows Forms a uma fonte de dados, mas o BindingNavigator controle foi projetado especificamente para trabalhar com o BindingSource componente. O BindingNavigator controle fornece uma interface de usuário para controlar o BindingSource item atual do componente. Por padrão, o BindingNavigator controle fornece botões que correspondem aos métodos de navegação no BindingSource componente. Para obter mais informações, consulte Como navegar em dados com o controle BindingNavigator do Windows Forms.

Ver também