XML - cadastro completo - ler, inserir, atualizar, excluir

<< Click to Display Table of Contents >>

Navigation:  XML >

XML - cadastro completo - ler, inserir, atualizar, excluir

Previous pageReturn to chapter overviewNext page

Tela

 

xml1

 

Arquivo xml resultante (movies.xml)

 

<?xml version="1.0" encoding="utf-8"?>
<Filmes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Filme>
    <Titulo>Jogos Vorazes</Titulo>
    <Rating>12</Rating>
    <Data>15-05-2009</Data>
  </Filme>
  <Filme>
    <Titulo>Star Wars</Titulo>
    <Rating>9</Rating>
    <Data>17-01-1986</Data>
  </Filme>
  <Filme>
    <Titulo>Detona Ralph</Titulo>
    <Rating>0</Rating>
    <Data>15-06-2013</Data>
  </Filme>
</Filmes>

 

Fonte

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Windows.Forms;

using System.Xml.Linq;

 

namespace LinqXML

{

    public partial class Form1 : Form

    {

        private const string ARQUIVO = @"movies.xml";

 

        public Form1()

        {

            InitializeComponent();

        }

 

        private void btnCarregar_Click(object sender, EventArgs e)

        {

            Atualizar();

        }

 

        private void Atualizar()

        {

            treeView1.Nodes.Clear();

 

            TreeNode node = new TreeNode("Lista de Filmes");

            treeView1.Nodes.Add(node);

 

            XElement Filmes = XElement.Load(ARQUIVO);

 

            var query =

                from Filme in Filmes.Elements("Filme"// Fazemos uma query pelos filmes e retiramos apenas o titulo

                select Filme.Element("Titulo");

 

            foreach (var filme in query)

            {

                TreeNode childNode = new TreeNode(filme.Value);

                node.Nodes.Add(childNode);

            }

            treeView1.ExpandAll();

        }

 

        private void btnAtualizar_Click(object sender, EventArgs e)

        {

            XElement Filmes = XElement.Load(ARQUIVO);

 

            // Tem de ser XElement e não var para podermos ter o metodo SetElementValue dos elementos

            IEnumerable<XElement> Filme =

                from b in Filmes.Elements("Filme")

                where ((string)b.Element("Titulo")).Equals(treeView1.SelectedNode.Text)

                select b;

 

            // Aleteramos os valores

            foreach (XElement ex in Filme)

            {

                ex.SetElementValue("Titulo", textBox1.Text);

                ex.SetElementValue("Rating", textBox2.Text);

                ex.SetElementValue("Data", textBox3.Text);

            }

 

            Filmes.Save(ARQUIVO);  // Gravamos as alteraçoes

            Atualizar();

        }

 

        private void btnAdicionar_Click(object sender, EventArgs e)

        {

            try

            {

                XElement Filmes = XElement.Load(ARQUIVO);

                XElement novoFilme = new XElement("Filme",    // Começo do elemento Filme

                    new XElement("Titulo", textBox5.Text),  // Adicionado o elemento Titulo

                    new XElement("Rating", textBox6.Text),  // Adicionado o elemento Rating

                    new XElement("Data", textBox4.Text)     // Adicionado o elemento Data

                    );                                      // Fim do elemento Filme

 

                Filmes.Add(novoFilme);   // Adicionamos o novo filme ao xml

                Filmes.Save(ARQUIVO);  // Temos de gravar as alterações para o ficheiro

                textBox5.Text = "";

                textBox6.Text = "";

                textBox4.Text = "";

                Atualizar();

            }

            catch (Exception ex)

            {

                MessageBox.Show("Ocorreu um erro ao gravar o novo filme" + ex.Message);

            }

 

        }

 

        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)

        {

            if (treeView1.SelectedNode.Text == "Lista de Filmes")

            {

                textBox1.Text = "";

                textBox2.Text = "";

                textBox3.Text = "";

                return;

            }

            XElement Filmes = XElement.Load(ARQUIVO);

 

            var Filme =

                from b in Filmes.Elements("Filme")

                where ((string)b.Element("Titulo")).Equals(treeView1.SelectedNode.Text)

                select new  // Depois da query adicionamos propriedades ao var Filme para estarem acessiveis no foreach

                {

                    Titulo = (string)b.Element("Titulo"),

                    Rating = (string)b.Element("Rating"),

                    Data = (string)b.Element("Data")

                };

 

            foreach (var dados in Filme) // a var dados já tem as novas propriedades 

            {

                textBox1.Text = dados.Titulo;

                textBox2.Text = dados.Rating;

                textBox3.Text = dados.Data;

            }

        }

 

        private void btnApagar_Click(object sender, EventArgs e)

        {

            XElement Filmes = XElement.Load(ARQUIVO);

            IEnumerable<XElement> Filme =

                from b in Filmes.Elements("Filme")

                where ((string)b.Element("Titulo")).Equals(treeView1.SelectedNode.Text)

                select b;

 

            foreach (XElement ex in Filme)

            {

                ex.Element("Titulo").Parent.Remove();  // Apagamos o pai deste elemento ou seja o Filme em si

            }

 

            Filmes.Save(ARQUIVO);

            Atualizar();

        }

 

        private void Form1_Load(object sender, EventArgs e)

        {

            Atualizar();

        }

    }

}