DataBinding e trabalho em camadas

O recurso de vincular os objetos do formulário a uma origem de dados, tal como um DataSet, é um poderoso recurso de RAD (desenvolvimento rápido de aplicações). Quando estamos desenvolvendo em camadas, porém, temos um pequeno problema. As instruções que realizam o DataBinding são inseridas no InitializeComponent do formulário, enquanto que a chamada do componente que irá trazer os dados fica normalmente no Load.

A chamada do componente tipicamente seria algo como:

 

ds1 = obj.lerdados()

 

O problema é que no momento em que fazemos isso estamos destruindo a instância do DataSet existente na variável ds1 e inserindo nesta variável um novo DataSet, vindo do componente.

O problema disso é que os DataBindings neste momento já haviam sido realizados com um ponteiro apontando para o DataSet anterior. Ao recebermos o novo, todos os DataBindings se perdem. Para contornar este problema podemos fazer o seguinte:

 

Dim dstmp As DataSet

 

dstmp = obj.lerdados

ds1.merge(dstmp)

 

Com esse código utilizamos uma variável temporária para receber o DataSet do componente e depois realizamos um Merge. Desta forma o ponteiro de objeto original não é destruído, apenas importa os dados do DataSet vindo do componente.