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.