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
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:
|
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 :
|
|
- Quando você incluir o
componente DataAdapter o assistente de configuração irá aparecer.
|
|
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" ?>
<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>
<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>
<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>
<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
estoque.ReadXml("estoque.xml") Vincular() CalcularPosicao() Catch ex As Exception MsgBox(ex.Message()) Me.Close() End Try End Sub |
|
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.
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()
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")
estoque.Tables("Veiculos").Columns("Gasolina").DefaultValue = "False" chkbAlcool.DataBindings.Add("Checked", estoque, "Veiculos.Alcool")
estoque.Tables("Veiculos").Columns("Alcool").DefaultValue = "False" rdbtBranca.DataBindings.Add("Checked", estoque, "Veiculos.Branco")
estoque.Tables("Veiculos").Columns("Branco").DefaultValue = "False" rdbtPreta.DataBindings.Add("Checked", estoque, "Veiculos.Preto")
estoque.Tables("Veiculos").Columns("Preto").DefaultValue = "False" rdbtPrata.DataBindings.Add("Checked", estoque, "Veiculos.Prata")
estoque.Tables("Veiculos").Columns("Prata").DefaultValue = "False" cboOrigem.DataBindings.Add("SelectedItem", estoque, "Veiculos.Origem")
cm = CType(Me.BindingContext(estoque, "Veiculos"), CurrencyManager)
|
|
Private Sub CalcularPosicao()Dim iCnt As Integer Dim iPos As IntegeriCnt = 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 :
+ (incluir) -> usa o método AddNew() do CurrencyManager - cm
X (excluir) -> usa o método RemoveAt() do CurrencyManager - cm
OK (Gravar) - usa o método WriteXml(nome do arquivo) para gravar no arquivo XML.
Private Sub tbIncluir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tbIncluir.Clickcm.AddNew() CalcularPosicao() 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 :
< (Anteior)
> (Próximo)
Sair
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:
Visão geral do modelo de objeto Excel: http://msdn.microsoft.com/pt-br/library/wss56bz7.aspx