Desvendando os segredos do Data Binding no VB.NET  - I


A vinculação de dados -  DataBinding - no VB.NET é uma poderosa característica que permite que elementos visuais no cliente seja conectados a uma fonte de dados como DataSet , DataViews ,  arrays , etc.  Alguns destes elementos visuais no cliente podem ser TextBox , ListBox , ComboBox , DataGrid , etc. Uma comunicação em duas vias é realizada de maneira que qualquer alteração feita na fonte de dados seja refletida imediatamente no elemento visual.

Bem ,  se você conhece a vinculação de dados nas versões anteriores deve estar pensando : "Ora , ora eu já vi este filme antes..." . Calma ! não se apresse em julgamentos temerários . Vale a pena você considerar o DataBinding no VB.NET como uma ferramenta muita mais poderosa e flexível que nas versões anteriores do VB. Eu pretendo convencê-lo disto em uma série de três artigos , dos quais este será o primeiro. Então acompanhe-me...

O DataBinding antes...

No modelo da vinculação de dados usado nas versões anteriores do VB a fonte de dados que você podia usar para vinculação estava praticamente limitada um banco de dados. Cada sistema de banco de dados fornecia e fornece suas próprias API´s para ajudá-lo a criar aplicações visuais com a vinculação de dados. Com isto o programador não tinha a flexibilidade de controlar o processo de vinculação. No fundo você tinha uma caixa preta , e , isto fez com que este recurso fosse praticamente evitado pelos desenvolvedores mais experientes.

O DataBinding depois...

Na plataforma .NET o .NET framework fornece um databinding muito mais flexível e poderoso que permite ao programador ter um controle muito acurado sobre as etapas envolvidas no processo de vinculação de dados. Uma das grandes melhorias que o .NET trouxe foi a introdução do databinding em páginas web através do uso dos controles do lado do servidor do .NET (ASP.NET).

Vantagens do DataBinding

  1. No VB.NET a vinculação de dados pode ser usada para criar aplicações rapidamente com menos código e com um performance muito boa.
  2. O VB.NET cria automaticamente o código da vinculação para você (para vê-lo procure na seção - Windows Generated Code -; com isto você não precisa perder tempo codificando , e,  você tem ainda a flexibilidade de modificar qualquer código do jeito que você quiser.
  3. Você pode controlar o processo do DataBinding usando Eventos.(veja abaixo)

Desvantangens do DataBinding

  1. Realmente você ainda pode escrever um código mais otimizado sem usar databinding.
  2. Se você quer flexibilidade total , isto somente pode ser alcançado sem usar databinding.

Conceitos sobre DataBinding (Vinculação de dados)

A seguir temos uma figura que ilustra de forma simples o conceito da vinculação de dados (DataBinding)

- Ao lado temos uma figura exibindo os dois modos de vinculação de dados:

- DataBinding Complexa

- DataBinding Simples

Para que o processo de vinculação de dados (chamado pelos 'gringos' de DataBinding) se realize deve existir um provedor de dados e um consumidor de dados de forma que uma ligação sincronizada seja estabelecida entre os dois. Os provedores de dados (Data Providers) contém os dados e os consumidores (Data Consumer) usam os dados expostos pelos provedores e os exibem.

Como disse no VB.NET temos uma maior amplitude de provedores de dados. No .NET qualquer classe ou componente que implemente a interface IList pode ser uma fonte de dados válida.  Se um componente implementa a interface IList então ele é transformado em uma coleção baseada em indices. Abaixo temos algumas das classes que suportam a interface IList :

Nota:

  1. A interface IList somente permite a vinculação em tempo de execução . Para poder usar a vinculação em tempo de desenvolvimento da aplicação você terá que implementar a interface IComponent.
  2. Você não pode fazer a vinculação a DataReaders nos formulários Windows (somente em formulários Webs).

A plataforma .NET framework suporta a vinculação de dados Simples e a Complexa.

Para tornar mais claro o conceito  temos a seguir o fluxo básico durante a vinculação de dados:

- Temos aqui a camada de controles com suas propriedades para vincular dados

- A seguir temos a coleção DataBinding composto pelos objetos Binding

- Depois temos o objeto BindingContext e o objeto CurrencyManager ou o objeto PropertyManager

No VB.NET os controles podem ter muitas propriedades que podem ser vinculadas a uma fonte de dados. Cada propriedade databound possui um -0 objeto Binding associado. Desde que um controle pode ter muitas objetos Binding, o controle possui uma coleção (uma instância da classe ControlBindingsCollection) de todos os objetos Bindings. (Diferentes propriedades de um mesmo controle podem  estar ligadas a diferentes datasources.)

Nota: Para ver a lista de propriedades que um controle suporta para vinculação , clique no controle , a seguir na caixa de propriedades do controle localize DataBindings e clique em Advanced. Você verá uma janela com a lista de propriedades como na figura a seguir:

Cada objeto Binding se comunica com um CurrencyManager ou PropertyManager. As classes CurrencyManager e PropertyManager são derivadas da classe base BindingManagerBase.  O objetivo da classe BindingManagerBase é manter a concorrência entre a fonte de dados e o controle. Das duas classes a classe CurrencyManager é usada quando a fonte de dados implementa a interface IList ( DataView, DataSet, ArrayList,etc.)  A classe CurrencyManager pode ser usada para vinculação simples ou complexa , porém a classe PropertyManager é usada quando o datasource é uma instância de uma classe definida pelo usuário. A propriedade dos controles esta vinculada a propriedade exposta por este objeto e ela somente pode ser usada para vinculação simples.

Geralmente você pode usar a seguinte regra: Usar o CurrencyManager quando sua classe é um Container de dados e usar o PropertyManager quando quiser vincular um controle a propriedades expostas pela sua própria classe.

Como podemos ter um formulário com muitos controles cada um vinculado a uma fonte de dados diferente, precisamos de uma classe para gerenciar os objetos CurrencyManager e PropertyManager. A classe BindingContext faz isto , e , cada formulário possui por padrão um objeto BindingContext associado a ele. (Você pode criar outros objetos BindingContext no formulário).

Resumindo:

  1. Um controle possui muitas propriedades que podem ser vinculadas.
  2. Cada propriedade databound do controle tem um objeto Binding associado a ela.
  3. Todos os objetos Binding para um controle estão contidos péla propriedade DataBindings do controle a qual é uma instãncia da classe ControlBindingsCollection.
  4. Cada objeto databinding se comunica com um objeto CurrencyManager ou PropertyManager.
  5. CurrencyManager e PropertyManager são derivados da classe BindingManagerBaseClass
  6. O objetoe BindingContext é uma coleção de objetos  CurrencyManager e PropertyManager.
  7. Um formulário contém por padrão um objeto BindingContext.
  8. Cada objeto  CurrencyManager ou PropertyManager encapsula o acesso a dados para uma fonte de dados por objeto BindingContext.

Controle o DataBinding

A real vantagem do DataBinding no VB.NET é ser flexível e isto é possível por que as classes Binding e BindingManagerBase suportam eventos. Isto permite que você altere os dados passados entre o controle e a fonte de dados. Veja um esquema abaixo:

Fluxo de dados padrão  Fluxo de dados usando Eventos
 - O objeto Binding expõe dois eventos : Format e Parse.

- O evento Format é disparado duas vezes : a primeira quando os dados são capturados da fonte de dados para o controle e a segunda quando a fonte de dados é alterada e o dado é atualizado para o controle.

- O evento Parse é disparado uma vez quando os dados são enviados do controle para a fonte de dados.

A CurrencyManager expõe três eventos :

  1. CurrentChanged - é disparado quando o valor vinculado sofre alteração.
  2. PositionChanged - é disparado quando a propriedade position foi alterada.
  3. Itemchanged - é disparado quando o item atual foi alterado.

 Com estes eventos você pode ter um controle sobre o fluxo de dados do controle para a fonte de dados e vice e versa.

A seguir eu vou dar um exemplo prático de como você pode usar eventos para controlar o fluxo de dados.

No artigo - ADO.NET - Criando uma Cadastro de Clientes - eu estou fazendo a vinculação de dados ao arquivo Biblio.mdb e exibindo os dados da tabela Clientes. Na vinculação do campo Nascimento , se você não notou, a data esta sendo exibida no formato dd/mm/yyyy hh:mm:ss (ver figura 1.0). Vamos usar o evento Format para alterar este formato para dd/mm/yyyy de forma a ficar como na figura 2 abaixo

figura 1.0

figura 2.0

1- Para podermos fazer isto primeiro vamos selecionar o TextBox - Nascimento - e na sua caixa de propriedades - remover a vinculação padrão.

2- A seguir inclua a linha de código abaixo no ínicio do seu código:

Dim WithEvents oBinding As Binding

3- Agora no evento Load do formulário inclua o código abaixo:

obinding = New Binding("Text", dsClientes, "Clientes.Nascimento")

txtNascimento.DataBindings.Add(oBinding)

- O código cria um novo objeto binding declarado na linha de código anterior (item 1) que vincula um campo Texto ("Text") usando a minha fonte de dados (dsClientes) a propriedade "Clientes.Nascimento"

- A seguir o objeto é incluido na coleção DataBindings das Caixas de Texto

4- Para alterar a formatação da data de nascimento vamos usar o código abaixo no evento Format do objeto oBinding declarado:

Private Sub obinding_Format(ByVal sender As Object, ByVal e As System.Windows.Forms.ConvertEventArgs) Handles oBinding.Format

e.Value = Format(e.Value, "dd/MM/yyyy")

End Sub

Nota: para efetuar uma vinculação padrão o código é : txtNascimento.DataBindings.Add("Text",dsClientes,"Clientes.Nascimento")

Com isto demonstrei que você pode controlar o fluxo de dados usando o DataBinding no VB.NET.

A seguir iremos ver exemplos básicos da utilização do DataBindig no artigo :  Desvendando os segredos do Data Binding no VB.NET  - II   

Romanos 7:14 Porque bem sabemos que a lei é espiritual; mas eu sou carnal, vendido sob o pecado.

Romanos 7:15 Pois o que faço, não o entendo; porque o que quero, isso não pratico; mas o que aborreço, isso faço.

Romanos 7:16 E, se faço o que não quero, consinto com a lei, que é boa.

Romanos 7:17 Agora, porém, não sou mais eu que faço isto, mas o pecado que habita em mim.

             Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti