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

wellingtonbalbo@gmail.com