VB.NET - DataBinding e XML


 

A utilização de controles vinculados nas versões 5 e 6 do Visual Basic tinha muitas limitações e era desencorajado em aplicações de produção. O VB.NET além de uma nova gama de recursos melhorou muito outros já existentes a utilização de controles vinculados aos dados foi um deles. Apenas para lembrar no VB.NET podemos vincular com DataTable , Collections , Arrays e qualquer componente que implemente a interface IList.

 

A título de introdução vou mostrar como efetuar a vinculação de controles a um banco de dados. Tenha em mente que o databinding pode ser extendido para qualquer fonte de dados : arquivos textos, vetores, arrays, coleções , etc...

 

No projeto a seguir irei vincular controles TextBox a uma fonte de dados MSDE. Mais precisamente irei exibir em um formulário windows nos controles TextBox os dados da tabela Products do banco de dados Northwind no MSDE.

 

Se você esta chegando agora e quer saber como instalar o MSDE e como importar a tabela Northwind.mdb para o MSDE leia os artigos:

 

Access ou SQL Server ? Entre a cruz e a espada ? Que tal o MSDE ?
MSDE - Criando tabelas com o Web Matrix
Migração Access -> SQL Server
Usando MSDE com o Visual Basic

MSDE - Usando o MSDEQuery

VB.NET - Preenchendo controles via MSDE.

 

DataBinding Simples

 

Inicie então um novo projeto no VS.NET do tipo Windows Application usando a linguagem VB.NET e no formulário padrão inclua os componentes: Label , TextBox e Button , conforme figura abaixo:

 

O formulário do projeto com os componentes usados

A guia Data exibindo os componentes para conexão com fonte de dados

 

Na caixa de ferramentas - ToolBox - clique na guia Data e insira no projeto os componentes : SqlConnection e SqlDataAdapter; a seguir altere o nome dos componentes para conexaoMSDE e daMSDE, conforme abaixo:

 

 
  • SqlConnection1 > conexaoMSDE
  • SqlDataAdapter1 -> daMSDE
Para definir a conexão com o MSDE instalado clique no componente conexaoMSDE e a seguir na janela de propriedades clique em ConnectionString.

A janela de propriedades de vinculação de dados deverá surgir. Selecione o provedor conforme figura ao Lado e clique em Avançar.

 

Na aba conexão informe :
  • O nome o servidor MSDE instalado
  • Selecione a tabela com a qual deseja realizar a conexão, no nosso caso a tabela será Northwind
  • e clique no botão testar conexão para verificar se tudo esta ok.
  • Estando tudo certo você verá uma tela como na figura ao lado.
- Quando você incluir o componente DataAdapter o assistente de configuração irá aparecer.
  • Selecione a conexão que você criou e clique no botão Next>
  • Na janela a seguir marque Use SQL Statements e clique em Next>
  • Agora digite a declaração SQL para selecionar todos os registros da tabela Products:
    SELECT * FROM Products
  • Clique em Next> e a seguir em Finish.
  • Pronto.

 

Você deverá gerar um DataSet , para fazer isso clique com o botão direito do mouse sobre o componente daMSDE já configurado, e selecione Generate DataSet...

Na janela - Generate DataSet - clique em OK

Altere o nome do DataSet gerado para dsProdutos

 

O terreno já esta preparado para podermos fazer a vinculação dos controles TextBox com os dados da tabela Products.

Selecione o primeiro TextBox e na janela de propriedades localize DataBindings e expanda para ver as opções.

Na opção Text clique com mouse na linha e selecione no dataset e na tabela Products o campo que deseja vincular, conforme figura abaixo:

Repita a operação para os demais controles TextBox somente alterando  o campo da tabela que deseja exibir no formulário.

Finalmente podemos incluir no formulário o código que é o arremate final que vai fazer tudo funcionar. Abaixo o código completo:

Executando o projeto teremos:

 

Bem , esta foi a introdução do artigo, vamos agora ao que interessa...  

 

DataBinding com XML

 

Vamos complicar um pouco a situação. Suponha que você precisa exibir em um formulário Windows os dados de um arquivo texto qualquer.

 

Como exemplo, suponha que você tenha um arquivo XML contendo informações sobre veículos e deseja exibir em um formulário os dados do arquivo , permitindo a navegação a inclusão de novos dados e a exclusão de dados.

 

O arquivo XML é chamado estoque.xml e seu conteúdo esta exibido a seguir:

 

<?xml version="1.0" standalone="yes" ?>
- <NewDataSet>
- <Veiculos>
  <Placa>JJV-9511</Placa>
  <Marca>WolksWagen</Marca>
  <Modelo>Parati GIII 1.6</Modelo>
  <Alcool>True</Alcool>
  <Gasolina>False</Gasolina>
  <Origem>Sao Paulo</Origem>
  <Branco>False</Branco>
  <Preto>True</Preto>
  <Prata>False</Prata>
  </Veiculos>
- <Veiculos>
  <Placa>MMJ-4587</Placa>
  <Marca>General Motors do Brasil</Marca>
  <Modelo>Corsa Sedan Classic 16V</Modelo>
  <Alcool>True</Alcool>
  <Gasolina>True</Gasolina>
  <Origem>Belo Horizonte</Origem>
  <Branco>True</Branco>
  <Preto>False</Preto>
  <Prata>False</Prata>
  </Veiculos>
- <Veiculos>
  <Placa>JCT-45678</Placa>
  <Marca>Ford do Brasil</Marca>
  <Modelo>Eco Esport</Modelo>
  <Alcool>False</Alcool>
  <Gasolina>True</Gasolina>
  <Origem>Curitiba</Origem>
  <Branco>False</Branco>
  <Preto>False</Preto>
  <Prata>True</Prata>
  </Veiculos>
- <Veiculos>
  <Placa>GHJ-1230</Placa>
  <Marca>Fiat do Brasil</Marca>
  <Modelo>Palio Weekwend Adventure 1.8</Modelo>
  <Alcool>False</Alcool>
  <Gasolina>True</Gasolina>
  <Origem>Rio de Janeiro</Origem>
  <Branco>False</Branco>
  <Preto>False</Preto>
  <Prata>True</Prata>
  </Veiculos>
  </NewDataSet>

 

Pois o seu objetivo é acessar o arquivo estoque.xml e exibir os dados em uma interface Windows que tem a seguinte cara:

 

 

Ah , um detalhe, tem que ser feito tudo via código...

 

Resolvendo o problema - Lendo arquivos XML e usando databinding para vincular os dados em componentes windows

 

Se você tivesse que usar o VB5/VB6 para resolver o problema proposto iria dar um pouco de trabalho, mas como vamos usar VB.NET as coisas ficaram muito simples , pois, o XML é nativo da plataforma .NET e existem diversas classes e métodos  para tratar arquivos XML.

 

A primeira coisa que teremos que fazer é criar um DataSet a partir do arquivo XML lendo os dados do arquivo estoque.xml.

 

Você já deve saber que o DatSet é o componente desconectado da plataforma .NET onde podemos ter representando em  memória tabelas sem a obrigação de ter acessado um banco de dados, A Classe DataSet pode conter várias tabelas e também relacionamentos entre as tabelas (“chave estrangeira”).

Dentre as grandes vantagens do DataSet são podemos citar:

Para este caso específico e todas as vezes que for preciso trabalhar bom XML podemos usar os métodos WriteXml() e ReadXml() do DataSet para respectivamente ler um arquivo XML para o DataSet e escrever no arquivo XML. É exatamente isto que vamos fazer.

 

Vou mostrar o código do formulário para a seguir comentar e explicar os detalhes importantes:

 

Dim estoque As DataSet

Dim cm As CurrencyManager
 

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


Try

   estoque.ReadXml("estoque.xml")

   Vincular()

   CalcularPosicao()

Catch ex As Exception

    MsgBox(ex.Message())

    Me.Close()

End Try

End Sub

  • Primeiro definimos as variáveis estoque como do tipo DataSet e a variável cm do tipo CurrencyManager
  • No evento Load do formulário efetuamos a leitura do arquivo XML - estoque.xml - usando o métodod ReadXml()
  • Em seguida chamamos as rotinas Vincular() e CalcularPosicao()
  • Vincular() - faz a vinculação dos controles com os dados lidos do arquivo XML
  • CalcularPosicao() - utiliza o CurrencyManager para controlar a navegação pelos registros

Public Sub New()
MyBase.New()

'This call is required by the Windows Form Designer.
    InitializeComponent()
    estoque = New DataSet("Veiculos")
    'Add any initialization after the InitializeComponent() call

End Sub

 
O código acima incluído na classe Sub New() inicia o dataset estoque passando para o construtor o nome Veiculos.

O que é um Construtor ? Um construtor , é um método especial que deve estar presente em uma classe para que a classe possa ser instanciada. Um construtor também é usado para inicializar as variáveis membros da classe. No VB.NET este método é chamado New.

Quando você instancia um objeto usando a palavra-chave New  o construtor da classe é chamado automaticamente e se você definir um construtor para sua classe é ele que será chamado. 

Então um construtor é um método que controla a inicialização de um objeto e você pode usá-lo para realizar as operações necessárias á incialização de um objeto. O VB.NET permite que você crie  uma rotina Sub New() dentro da sua classe para criar um construtor. O construtor é executado apenas uma vez quando você criar a instância do objeto.

A palavra chave MyBase é usada para se  referir aos membros da classe base quando se trabalha em uma classe derivada. Você usa a MyBase para se referenciar a classe base imediata e seus membros públicos herdados.

 

Private Sub Vincular()


'vinculamos os dados do documento xml aos controles

txtPlaca.DataBindings.Add("Text", estoque, "Veiculos.Placa")

txtMarca.DataBindings.Add("Text", estoque, "Veiculos.Marca")

txtModelo.DataBindings.Add("Text", estoque, "Veiculos.Modelo")

chkbGasolina.DataBindings.Add("Checked", estoque, "Veiculos.Gasolina")


'valor padrão no dataset

estoque.Tables("Veiculos").Columns("Gasolina").DefaultValue = "False"

chkbAlcool.DataBindings.Add("Checked", estoque, "Veiculos.Alcool")


'valor padrão no dataset

estoque.Tables("Veiculos").Columns("Alcool").DefaultValue = "False"

rdbtBranca.DataBindings.Add("Checked", estoque, "Veiculos.Branco")


'valor padrão no dataset

estoque.Tables("Veiculos").Columns("Branco").DefaultValue = "False"

rdbtPreta.DataBindings.Add("Checked", estoque, "Veiculos.Preto")


'valor padrão no dataset

estoque.Tables("Veiculos").Columns("Preto").DefaultValue = "False"

rdbtPrata.DataBindings.Add("Checked", estoque, "Veiculos.Prata")


'valor padrão no dataset

estoque.Tables("Veiculos").Columns("Prata").DefaultValue = "False"

cboOrigem.DataBindings.Add("SelectedItem", estoque, "Veiculos.Origem")


'vinculamos o currencymanager

cm = CType(Me.BindingContext(estoque, "Veiculos"), CurrencyManager)


End
Sub

  • Vinculamos os TextBox ao dataset estoque
  • A seguir definimos os valores padrão para os controles checkBox , radiobutton e combobox
  • Se não for feito a etapa acima vai ocorrer um erro durante a inclusão de um novo dado no arquivo.

Private Sub CalcularPosicao()

Dim iCnt As Integer

Dim iPos As Integer

iCnt = cm.Count

iPos = cm.Position + 1

lblPosicao.Text = iPos.ToString + " de " + iCnt.ToString

End Sub

A função CalcularPosição apenas calcula a posição relativa em relação ao total de registros do datset e exibe no formulário

 

O restante do código esta associado a seu respectivo botão. Abaixo representamos o código para os botões :

 

Private Sub tbIncluir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tbIncluir.Click

    cm.AddNew()

   CalcularPosicao()
End
Sub
 

Private Sub btnExcluir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExcluir.Click

   cm.RemoveAt(cm.Position)

   CalcularPosicao()

End Sub

 

Private Sub btnGravar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGravar.Click

   cm.EndCurrentEdit()

   estoque.WriteXml("estoque.xml")

End Sub


 

Private Sub btnProximo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnProximo.Click

   cm.Position += 1

   CalcularPosicao()

End Sub

 

Private Sub btnAnterior_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAnterior.Click

   cm.Position -= 1

   CalcularPosicao()

End Sub

 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

  estoque.Dispose()

  Me.Close()

End Sub

 

O restando do código refere-se aos botões de navegação : 

Executando a aplicação teremos :

 

 

Voilá, temos os dados do arquivo XML exibidos no formulário e usando o databinding os mesmos são vinculados aos componentes do formulário.

 

Pegue o código do projeto aqui :  vinculaXML.zip

 

Até o próximo artigo .NET

 


Veja os Destaques e novidades do SUPER DVD VB (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Veja mais sistemas completos para a plataforma .NET no Super DVD .NET , confira...

Quer aprender C# ??

Chegou o Super DVD C# com exclusivo material de suporte e vídeo aulas com curso básico sobre C#
 

   Gostou ?   Compartilhe no Facebook    Compartilhe no Twitter

Referências:


José Carlos Macoratti