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