Codificação Final do Projeto: CRUD em XML com ASP.NET e C# - Parte 3
Olá pessoal, nesteartigo veremos a codificação final dos métodos e testaremos o projeto com as operações de CRUD. Acompanhem:
Voltando de onde paramos, confira a codificação do método Gravar, com as explicações logo abaixo:
privatevoid GravarXML()
{
try
{
if ((int)Session["Gravar"] == 1)
{
if (txtDescricao.Text == String.Empty || txtQtde.Text == String.Empty ||
txtPcUnitario.Text == String.Empty || txtVlTotal.Text == String.Empty)
{
this.ClientScript.RegisterClientScriptBlock(Page.GetType(), "Mensagem",
"<script>alert('Preencha todos os campos!');</script>");
}
else
{
XmlDocument objXmlDocument = newXmlDocument();
objXmlDocument.Load(Server.MapPath(@"App_Data\Produtos.xml"));
XmlElement objXmlElement = objXmlDocument.CreateElement("produtos");
XmlElement objXmlDescricao = objXmlDocument.CreateElement("descricao");
XmlElement objXmlQuantidade = objXmlDocument.CreateElement("quantidade");
XmlElement objXmlPcUnitario = objXmlDocument.CreateElement("precounitario");
XmlElement objXmlValorTotal = objXmlDocument.CreateElement("valortotal");
objXmlDescricao.InnerText = this.txtDescricao.Text;
objXmlQuantidade.InnerText = this.txtQtde.Text;
objXmlPcUnitario.InnerText = this.txtPcUnitario.Text;
objXmlValorTotal.InnerText = this.txtVlTotal.Text;
objXmlElement.AppendChild(objXmlDescricao);
objXmlElement.AppendChild(objXmlQuantidade);
objXmlElement.AppendChild(objXmlPcUnitario);
objXmlElement.AppendChild(objXmlValorTotal);
objXmlDocument.DocumentElement.AppendChild(objXmlElement);
objXmlDocument.Save(Server.MapPath(@"App_Data\Produtos.xml"));
this.ClientScript.RegisterClientScriptBlock(Page.GetType(), "Mensagem",
"<script>alert('Registro gravado com sucesso!');</script>");
this.Session["Gravar"] = 0;
CarregarXML();
}
}
else
{
this.ClientScript.RegisterClientScriptBlock(Page.GetType(), "Mensagem",
"<script>alert('Clique no botão Limpar!');</script>");
}
}
catch (Exception)
{
this.ClientScript.RegisterClientScriptBlock(Page.GetType(), "Mensagem",
"<script>alert('Ops, ocorreu um erro ao Gravar o XML!');</script>");
}
}
Começo verificando se o valor da minha Session é 1, se for faço outra verificação, se os campos estão vazios, se estiverem exibo um alert ao usuário para preenchê-los. Se estiverem preenchidos, começo a codificação instanciando o objeto da classe XmlDocument e carregando meu XML por meio do método Load. Depois instancio um objeto da classe XmlElement, que recebe o objeto XmlDocument instanciado chamando o método CreateElement, passando como parâmetro o que seria minha tabela Produtos. Faço o mesmo adicionando outros elementos ao XmlDocument com o que seriam as “colunas” Descrição, Quantidade, Preço Unitário e Valor Total.
Após adicioná-los, os atribuo aos respectivos campos texto, em que o usuário digitou seus valores. Logo após, uso novamente o objXmlElement chamando o método AppendChild, que adiciona os nós (referentes aos 4 campos) na lista de nós do XmlElement. Então chamo o método AppendChild, agora do objXmlDocument, para poder finalmente gravar os registros em meu XML.
Finalizo chamando o método Save, passando como parâmetro o caminho do meu XML, exibo a mensagem ao usuário, atribuo o valor 0 para minha Session e chamo o método para popular meu Grid.
Sem mais delongas, veja abaixo a codificação dos métodos Atualizar e Excluir, que seguem uma lógica parecida com a do método Gravar:
Atualizar:
privatevoid AtualizarXML()
{
try
{
if (selectedIndex == -1)
{
this.ClientScript.RegisterClientScriptBlock(Page.GetType(), "Mensagem",
"<script>alert('Selecione um registro do GRID!');</script>");
}
else
{
XmlDocument objXmlDocument = newXmlDocument();
objXmlDocument.Load(Server.MapPath(@"App_Data\Produtos.xml"));
XmlNode objXmlNode = objXmlDocument.DocumentElement.ChildNodes.Item(selectedIndex);
objXmlNode["descricao"].InnerText = txtDescricao.Text;
objXmlNode["quantidade"].InnerText = txtQtde.Text;
objXmlNode["precounitario"].InnerText = txtPcUnitario.Text;
objXmlNode["valortotal"].InnerText = txtVlTotal.Text;
objXmlDocument.Save(Server.MapPath(@"App_Data\Produtos.xml"));
this.ClientScript.RegisterClientScriptBlock(Page.GetType(), "Mensagem",
"<script>alert('Registro atualizado com sucesso!');</script>");
CarregarXML();
}
}
catch (Exception)
{
this.ClientScript.RegisterClientScriptBlock(Page.GetType(), "Mensagem",
"<script>alert('Ops, ocorreu um erro ao Atualizar o XML!');</script>");
}
}
Excluir:
privatevoid ExcluirXML()
{
try
{
if (selectedIndex == -1)
{
this.ClientScript.RegisterClientScriptBlock(Page.GetType(), "Mensagem",
"<script>alert('Selecione um registro do GRID!');</script>");
}
else
{
XmlDocument objXmlDocument = newXmlDocument();
objXmlDocument.Load(Server.MapPath(@"App_Data\Produtos.xml"));
XmlNode objXmlNode = objXmlDocument.DocumentElement.ChildNodes.Item(selectedIndex);
objXmlNode.ParentNode.RemoveChild(objXmlNode);
objXmlDocument.Save(Server.MapPath(@"App_Data\Produtos.xml"));
this.ClientScript.RegisterClientScriptBlock(Page.GetType(), "Mensagem",
"<script>alert('Registro excluído com sucesso!');</script>");
LimparCampos();
CarregarXML();
}
}
catch (Exception)
{
this.ClientScript.RegisterClientScriptBlock(Page.GetType(), "Mensagem",
"<script>alert('Ops, ocorreu um erro ao Excluir o XML!');</script>");
}
}
Salve o projeto, compile a aplicação e faça os testes com todos os métodos:
Disponibilizo a quem interessar o código-fonte do projeto clicando aqui.
Assim finalizo o artigo. Muito obrigado a todos!
Créditos à LuizMaia, que fez as videoaulas e ao Portal Linha de Código, por onde pude baixá-las (mediante assinatura), estudá-las e posteriormente fazer este artigo.
Um abraço, e até o próximo artigo
Wellington Balbo de Camargo