Olá pessoal, neste artigo começaremos as codificações de alguns métodos, propriedades e eventos. Acompanhem:

 Vá à página de códigos do Default.aspx e crie o seguinte método, que irá carregar os dados no GridView:

privatevoid CarregarXML()

    {

try

        {

DataSet objDataSet = newDataSet();

            objDataSet.ReadXml(Server.MapPath(@"App_Data\Produtos.xml"));

 

if (objDataSet.Tables.Count > 0)

            {

this.grdDados.DataSource = objDataSet;

this.grdDados.DataBind();

            }

        }

catch (Exception)

        {

this.ClientScript.RegisterClientScriptBlock(Page.GetType(), "Mensagem",

"<script>alert('Ops, ocorreu um erro ao Carregar o XML!');</script>");

        }

    }

Veja que foi bem simples a codificação, instanciei um objeto da classe DataSet, chamei nele o método ReadXml, passando como parâmetro o local onde foi feito meu arquivo XML. Logo depois, fiz a verificação se meu DataSetcontém registros (por meio do Count> 0), se ele tiver, alimento o GridView com seus dados, e finalizo usando o método DataBind, obrigatório após o DataSource de um Grid.

 Lembre-se de usar os namespacesSystem.Data e System.XML.

 Agora vá ao evento Load e adicione o seguinte código, apenas para chamar o método criado somente se não for PostBack da página:

protectedvoid Page_Load(object sender, EventArgs e)

{

if (!Page.IsPostBack)

        {

            CarregarXML();

        }

    }

 Compile sua aplicação e veja o resultado:


Antes de começarmos a codificar os métodos, vamos criar uma Session no Page_Load da aplicação:

if (!Page.IsPostBack)

        {

            CarregarXML();

this.Session["Gravar"] = 0;

}

 Assim toda vez que a página for renderizada esta Session terá o valor 0. Será explicado o porquê disso logo abaixo. Primeiramente crie o método para limpar os campos:

privatevoid LimparCampos()

    {

this.txtDescricao.Text = String.Empty;

this.txtQtde.Text = String.Empty;

this.txtPcUnitario.Text = String.Empty;

this.txtVlTotal.Text = String.Empty;

this.Session["Gravar"] = 1;

}

 Lembre-se depois de chamar os métodos que criarmos em seus respectivos botões.

 Note que atribui o valor 1 à minha Session. Assim posso fazer uma verificação na hora que o usuário for gravar um registro: somente será possível a gravação se o valor da Session for 1.

Agora precisamos criar uma propriedade do tipo int, para verificarmos qual é o índice selecionado do Grid:

internalint selectedIndex

    {

get

        {

if (this.Session["SelectedIndex"] == null)

return -1;

 

returnInt32.Parse(this.Session["SelectedIndex"].ToString());

        }

set

        {

this.Session["SelectedIndex"] = value;

}

    }

 Note que criei uma nova Session, chamada SelectedIndex, e depois a retornei para a propriedade, convertida para o tipo int. Como já disse, esta propriedade irá verificar qual índice do Grid foi selecionado. Para isso, devemos “jogá-la” dentro do evento SelectedIndexChanged:

protectedvoid grdDados_SelectedIndexChanged(object sender, EventArgs e)

{

        selectedIndex = this.grdDados.SelectedIndex;

        ProcurarDadosXML(selectedIndex);

this.Session["Gravar"] = 0;

    }

 Note que criei outro método, que irá procurar o índice definido pelo GridView, no momento da seleção do usuário. Confira o método e as explicações abaixo:

privatevoid ProcurarDadosXML(int selectedIndex)

    {

try

        {

XmlDocument objXmlDocument = newXmlDocument();

            objXmlDocument.Load(Server.MapPath(@"App_Data\Produtos.xml"));

 

XmlNodeList objNodeList = objXmlDocument.DocumentElement.ChildNodes;

XmlNode objNode = objNodeList.Item(selectedIndex);

 

            txtDescricao.Text = objNode["descricao"].InnerText;

txtQtde.Text = objNode["quantidade"].InnerText;

txtPcUnitario.Text = objNode["precounitario"].InnerText;

txtVlTotal.Text = objNode["valortotal"].InnerText;

        }

catch (Exception)

        {

this.ClientScript.RegisterClientScriptBlock(Page.GetType(), "Mensagem",

"<script>alert('Ops, ocorreu um erro ao Carregar o XML!');</script>");

        }

    }

Criei um método do tipo void, com um parâmetro do tipo int, depois instanciei um objeto da classe XmlDocument e chamei o método Load, passando como parâmetro o local onde está meu XML. Depois instanciei um objeto da classe XmlNodeList, atribuindo a ele o objeto XmlDocument chamando os nós filhos (método ChildNodes). Logo após instanciei um objeto da classe XmlNode, que recebe o objNodeList chamando o método Item, que recupera um item por vez da lista de nós filhos. Passei como parâmetro para o método Item, o parâmetro declarado na assinatura do método (selectedIndex). Finalmente atribui os valores do objNode (que contém as “colunas” da “tabela” Produtos) aos controles TextBox.

 Simples né?

 Finalizando codifique o evento PageIndexChanging(caso precisemos paginar o Grid):

protectedvoid grdDados_PageIndexChanging(object sender, GridViewPageEventArgs e)

    {

        CarregarXML();

this.grdDados.PageIndex = e.NewPageIndex;

this.grdDados.DataBind();

}

Assim finalizo o artigo. Na próxima parte finalmente codificaremos os métodos Gravar, Excluir e Atualizare veremos o resultado final, não percam!

 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