Arquitetura do componente BindingSource

Com o BindingSource componente, você pode vincular universalmente todos os controles do 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:

  • Habilita a associação a objetos comerciais em tempo de design.

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

  • Simplifica a criação de uma lista que ofereça suporte à interface, fornecendo notificação de alteração de lista para fontes de dados que não oferecem suporte nativo à notificação de IBindingList alteração de lista.

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

  • Fornece um nível de indireção entre a fonte de dados e o controle. A indireção é importante quando a fonte de dados pode se alterar em tempo de execução.

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

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

Recursos do 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 associaçã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 associar a qualquer tipo. Por exemplo, você pode anexar a propriedade a um ou a um DataSet objeto comercial e, em ambos os casos, usar o mesmo conjunto de propriedades, métodos e eventos para manipular a DataSource fonte de dados.

A interface consistente fornecida pelo BindingSource componente simplifica muito o processo de vinculação de dados aos controles. Para tipos de fonte de dados que fornecem notificação de alteração, o componente comunica automaticamente as alterações entre o BindingSource 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 pelo BindingSource 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 controle diretamente a uma fonte de dados, você vincula o controle a um BindingSource, e anexa a fonte de dados à BindingSource propriedade do DataSource componente.

Com esse nível de indireção, você pode alterar a fonte de dados sem redefinir a associação de controle. Isso oferece as seguintes funcionalidades:

Gerenciamento de moedas

O BindingSource componente implementa a interface para lidar com o ICurrencyManagerProvider gerenciamento de moeda para você. Com a ICurrencyManagerProvider interface, você também pode acessar o gerenciador de moedas para um BindingSource, além do gerenciador de moedas para outro BindingSource vinculado ao mesmo DataMember.

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

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

Método GetRelatedCurrencyManager
Se houver outro BindingSource vinculado ao membro de dados especificado, obterá seu gerenciador de moedas.

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

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

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

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

Fonte de dados como uma lista

O BindingSource componente implementa as IBindingListView interfaces 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 DataSource propriedade pode ser definida como 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 de lista resultante.

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

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

BindingSource como uma IBindingList

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

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

Criação de item personalizado

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

Criação de item transacional

O BindingSource componente implementa a interface, que permite a ICancelAddNew 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.

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

  • O CancelNew método reverterá a adição pendente se o método ainda não tiver sido confirmado.

Suporte a IEnumerable

O BindingSource componente habilita controles de vinculação a fontes de IEnumerable dados. Com esse componente, você pode vincular a uma fonte de dados, como um System.Data.SqlClient.SqlDataReaderarquivo .

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

Suporte a tempo de design

Alguns tipos de objeto não podem ser criados em tempo de design, como objetos criados de uma classe de fábrica ou objetos retornados por um serviço Web. Às vezes é necessário associar os controles a esses tipos em tempo de design, mesmo que não haja nenhum objeto na memória aos quais os controles podem ser associados. 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 oferecer suporte a esse cenário, o BindingSource componente oferece suporte à vinculação a um Typearquivo . Quando você atribui um à DataSource propriedade, o BindingSource componente cria um Type vazio BindingList<T> de Type itens. Quaisquer controles que você vincular subsequentemente 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 associar um controle dos Windows Forms a um tipo.

Métodos estáticos ListBindingHelper

Todos System.Windows.Forms.BindingContextos tipos , System.Windows.Forms.CurrencyManagere BindingSource compartilham lógica comum para gerar uma lista a partir de um DataSource/DataMember par. Além disso, essa lógica comum é publicamente exposta para ser usada por autores de controle e terceiros nos seguintes métodos static:

Classificação e filtragem com a interface IBindingListView

O BindingSource componente implementa a interface, que estende a IBindingListIBindingListView interface. O IBindingList oferece classificação de coluna única e o IBindingListView oferece classificação e filtragem avançadas. Com IBindingListViewo , você pode classificar e filtrar itens na fonte de dados, se a fonte de dados também implementar uma dessas interfaces. O BindingSource componente 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 que você pode usar para classificação e filtragem.

Membro Descrição
Propriedade Filter Se a fonte de dados for um IBindingListView, obterá ou definirá a expressão usada para filtrar quais linhas serão exibidas.
Propriedade Sort Se a fonte de dados for um , obterá ou definirá um IBindingListnome de coluna usado para classificar e classificar informações de ordem.

-ou-

Se a fonte de dados for um 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 o BindingNavigator

Você pode usar o componente para vincular qualquer controle do Windows Forms a uma fonte de dados, mas o controle foi projetado especificamente para trabalhar com o BindingSourceBindingNavigatorBindingSource 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 dos Windows Forms.

Confira também