|
<< Click to Display Table of Contents >> XML - cadastro completo - ler, inserir, atualizar, excluir |
![]() ![]()
|
Tela

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();
}
}
}