As perspectivas de XML para armazenamento de dados são surpreendentes e até mesmo os Data WareHouses já estão armazenando informações no formato XML. Como o objetivo principal de armazéns de dados é armazenar dados não-operacionais a longo prazo, ou seja, para trocá-los ao longo do tempo, as razões fundamentais para o sucesso esmagador do XML como um formato de troca também esperam por data warehouses.
Um data warehouse (ou armazém de dados, ou depósito de dados no Brasil) é um sistema de computação utilizado para armazenar informações relativas às atividades de uma organização em bancos de dados, de forma consolidada. O desenho da base de dados favorece os relatórios, a análise de grandes volumes de dados e a obtenção de informações estratégicas que podem facilitar a tomada de decisão.
Se pensarmos que a plataforma .NET oferece diversos recursos para que possamos tratar informações no formato XML, de forma rápida e descomplicada, temos aí um motivo a mais para pensarmos na utilização do formato XML quando realmente indicado.
Neste artigo, eu vou mostrar como criar uma aplicação usando a linguagem C# que realiza o gerenciamento de informações sobre alunos, incluindo a foto, persistindo e recuperando as informações de um arquivo XML. É uma aplicação simples, mas meu objetivo é mostrar o potencial que tem esse recurso na plataforma .NET.
No exemplo deste artigo, eu vou armazenar as seguintes informações sobre os alunos:
- Código
- Nome
- Curso
- Mensalidade
- Foto
Irei utilizar o arquivo Alunos.xml para armazenar as informações dos alunos. Esse arquivo possui a seguinte estrutura:
As fotos dos alunos serão armazenadas em uma pasta do projeto chamada Dados juntamente com o arquivo xml. Para evitar que existam nomes de fotos duplicadas (esse é um dos problemas de usar essa solução), eu vou sempre concatenar o código do aluno mais o caractere cerquilha (#) com o nome da foto. Dessa forma, sempre teremos um nome único para a foto.
Para criar o projeto deste artigo, eu vou usar o Visual C# 2008 Express Edition e, antes de iniciar o projeto, vou mostrar a aparência que terá a nossa aplicação na figura abaixo:
Agora vamos ao que interessa...
Criando a aplicação Windows Forms no Vsual C# 2008 Express Edition
Abra o Visual C# 2008 Express e crie um novo projeto do tipo Windows Forms Application no menu File->New Project -> Windows Forms Application com o nome CadastroAlunos.
No formulário form1.cs, vamos incluir os controles a partir da ToolBox conforme o layout da figura abaixo:
- 1 DataGridView - gdvAlunos
- 4 TextBox : txtCodigo, txtNome, txtCurso, txtMensalidade, picFoto
- 11 Buttons assim designados:
01. Buttons para movimentação dos registros:
- btnPrimeiro
- btnAnterior
- btnProximo
- btnUltimo
02. Botões para operações de manutenção de dados:
- btnInlcuir
- btnProcurar
- btnAtualizar
- btnDeletar
- btnLimpar
- btnCarregaXML
- btnSair
- btnLocalizarFoto
- 1 Contrrole PictureBox - picFoto
Além disso, vamos usar dois controles OpenFileDialog: ofd1 e ofd2. Após incluir os controles acima e definir o nome de cada um conforme indicado, defina os controles conforme o layout acima. A seguir, vamos definir os namespaces usados no projeto no início do formulário form1.cs:
Feito isso, vamos definir as variáveis que serão usadas no projeto:
Vou começar definindo o código do botão de comando Carregar Arquivo XML.
Ao clicar no botão, será aberta uma janela de diálogo OpenFileDialog para que seja possível selecionar o arquivo XML que desejamos carregar e exibir no controle DataGridView - gdvAlunos. O código é visto abaixo:
Se um arquivo for selecionado, então faremos o seguinte:
- Limpamos os controles do formulário: btnLimpar.PerformClick();
- Obtemos o caminho e o nome do arquivo selecionado: fcaminho = ofd1.FileName;
- Criamos um dataset e, usando o método ReadXml(fcaminho), lemos o conteúdo do arquivo XML para o dataset;
- Definimos uma chave primária na tabela a fim de procurar o registro usando o método Find;
O método Find da coleção Rows retorna um objeto DataRow, e, nesse caso, uma única linha e não um array de linhas. Esse método precisa que você defina a propriedade chave primária (Primary Key) antes de usá-lo. Se você não fizer isso, vai obter uma exceção.
- Chamamos a rotina mostrarDados() para exibir os dados no DataGridView.
Vejamos a seguir o código da rotina mostrarDados():
Este código verifica se existem linhas na tabela:
Em caso positivo, exibe os dados nos controles do formulário. Estamos usando um dataset não tipado, no qual temos que definir a posição do registro na tabela do dataset da seguinte forma:
- ds - o dataset
- ds.Tables[0] - a primeira tabela do dataset (só existe uma mesmo)
- ds.Tables[0].Rows[reg][n] - campo de índice igual a n existente na linha (Rows)
A rotina mostrarDados() não retorna nada, por isso o modificador void. Ela será usada sempre que desejamos exibir informações nos controles do formulário.
Vejamos agora o código do botão Incluir que deverá incluir um novo aluno no arquivo XML:
Verificamos se o registro já existe usando o método Find: linharegistro = ds.Tables[0].Rows.Find(txtCodigo.Text).
Em caso positivo, criamos uma nova linha(NewRow) e atribuímos os valores informados no TextBox à nova linha. Chamamos a rotina SalvaFoto() e incluímos a nova linha na tabela e, em seguida, gravamos os dados no arquivo XML usando o método ds.WriteXml().
A rotina SalvaFoto() tem seu código exibido a seguir:
Neste código, atribuímos o caminho da foto à variável pcaminho e montamos o nome da foto com o código do aluno mais o caractere # e o nome da foto. Montamos o diretório de destino e salvamos a foto no disco. No botão Procurar, temos o código que localiza um registro e exibe as informações no formulário:
Solicitamos o código do aluno usando o InputBox e novamente usamos o método Find para localizar o registro. O código do botão Atualizar que altera os dados do arquivo XML:
Localizamos o item usando o método Find e atribuímos os valores informados nas caixas de texto às linhas da tabela, salvamos a foto e gravamos as alterações no arquivo XML. A rotina para excluir uma linha do arquivo é vista no código a seguir:
Localizamos o item usando o método Find e usando método Remove excluímos a linha da tabela. O código de cada um dos botões de navegação é mostrado a seguir:
Verificamos a posição do registro e usamos a rotina mostraDados para exibir os dados atuais. O código do botão Limpar é dado a seguir:
Também incluímos o código abaixo no evento CellClick do DataGridView.
Dessa forma, quando uma linha do grid for clicada, obtemos os valores da linha e exibimos no formulário. Para encerrar, temos o código do botão que encerra a aplicação:
Com isso, mostramos que podemos ter informações armazenadas em arquivos XML e que podemos tratá-las de forma dinâmica e funcional com os recursos da linguagem C#.
Simples, simples assim. Pegue o projeto completo aqui: CadastroXML.zip.
Eu sei, é apenas XML, mas eu gosto..
Fora de tópico Mostrar Código Esconder Código Mostrar EmoticonEsconder Emoticon