Editando os Dados no GridView - C#.NET

Veja neste artigo uma continuação do artigo de como criar um projeto em C#.NET, para editar dados no GridView.

Olá pessoal, neste artigo será dado continuidade ao projeto criado para editar dados do GridView, em .NET, utilizando a linguagem C#. Acompanhem:

Já temos feito o carregamento dos dados e passagem via QueryString do ID do produto para a página de detalhes, onde é recuperado esse ID, feito uma consulta no banco e retornado os valores para os TextBoxes.

Adicione a esta página um botão, dando a ele o ID btnAlterarValores. Agora vá a página de códigos e crie uma variável que será a propriedade que irá armazenar o ID do produto, no momento em que essa página for chamada. Dessa forma utilizaremos o conceito de ViewState. A Listagem 01 ilustra a criação dessa propriedade.

public Int32 IdProduto { get { if (ViewState["IdProduto"] != null) return Convert.ToInt32(ViewState["IdProduto"]); return 0; } set { ViewState["IdProduto"] = value; } }
Listagem 01. Propriedade IdProduto, usando ViewState
Nota: Note que é usado o get e o set, já que a utilizo para retornar e atribuir valor.

Assim, conseguimos manter o valor do ID mesmo após a página sofrer um Postback. Altere o evento Load da página para que a propriedade criada receba o valor do ID, como ilustra a Listagem 02.

protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { if (Request.QueryString["IdProduto"] != null) { this.CarregarDetalhesProduto(Convert.ToInt32(Request.QueryString["IdProduto"])); this.IdProduto = Convert.ToInt32(Request.QueryString["IdProduto"]); } } }
Listagem 02. Evento Page Load

Agora é necessário criar o método para atualizar os dados no banco. Para isso vá a classe Produtos e crie uma variável que irá conter a instrução de UPDATE, ilustrado na Listagem 03.

public string strUpdate = "UPDATE Products SET " + " ProductName = @ProductName, UnitPrice = @UnitPrice, " + " UnitsInStock = @UnitsInStock " + " WHERE ProductID = @ProductID";
Listagem 03. Instrução SQL de Update

A Listagem 04 ilustra o método para atualizar os dados.

public void AtualizarValores(ModeloProdutos objModelo) { using (objConexao = new SqlConnection(strStringConexao)) { using (objCommand = new SqlCommand(strUpdate, objConexao)) { try { objConexao.Open(); objCommand.Parameters.AddWithValue("@ProductID", objModelo.ProductID); objCommand.Parameters.AddWithValue("@ProductName", objModelo.ProductName); objCommand.Parameters.AddWithValue("@UnitPrice", objModelo.UnitPrice); objCommand.Parameters.AddWithValue("@UnitsInStock", objModelo.UnitsInStock); objCommand.ExecuteNonQuery(); } catch (Exception ex) { throw new Exception(ex.Message); } finally { objConexao.Close(); } } } }
Listagem 04. Método AtualizarValores
Nota: Note que é utilizado ações comuns ao se trabalhar com banco de dados utilizando a tecnologia ADO.NET.

Voltando a página de detalhes, adicione um botão para alterar os valores e, no evento click dele, adicione a codificação da Listagem 05.

protected void btnAlterarValores_Click(object sender, EventArgs e) { if (!String.IsNullOrEmpty(txtProduto.Text)) { var classe = new Produtos(); var modelo = new Produtos.ModeloProdutos(); modelo.ProductID = this.IdProduto; modelo.ProductName = txtProduto.Text; modelo.UnitPrice = Convert.ToDecimal(txtPrecoUnitario.Text); modelo.UnitsInStock = Convert.ToInt16(txtUnidadesEstoque.Text); classe.AtualizarValores(modelo); Response.Redirect("Produtos.aspx"); } }
Listagem 05. Evento click do botão
Nota: Note que é verificado se o valor do textbox de produto é diferente de nulo ou vazio. Isto porque na tabela Products, do Northwind, essa coluna é de preenchimento obrigatório. Após isso é atribuído os valores dos controles aos valores da variável modelo, que é uma instância da classe ModeloProdutos, que é passada como parâmetro para o método criado na Listagem 04. Ao final é feito um redirecionamento a página de Produtos.

Faça os testes atualizando os registros do Grid.

Na página de Produtos o ID do produto clicado é passado via QueryString para a página de Detalhes. Outra forma de fazermos isso é utilizando a Session . Assim não passamos nada na URL, além do necessário.

Para fazermos isso é simples, vá à página de Produtos e altere o evento RowCommand, como ilustrado na Listagem 06.

protected void grdDados_RowCommand(object sender, GridViewCommandEventArgs e) { if (e.CommandName.Equals("Editar")) { Session.Add("IdProduto", e.CommandArgument.ToString()); this.Response.Redirect("DetalheProduto.aspx"); } }
Listagem 06. Utilizando Session para armazenar o ID do produto clicado

Para finalizarmos é necessário que seja feita a alteração na página de Detalhes, no evento Page Load, já que não pegaremos mais o valor da QueryString. A Listagem 07 ilustra como fazer isso.

protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { if (Session["IdProduto"] != null) { this.CarregarDetalhesProduto(Convert.ToInt32(Session["IdProduto"])); this.IdProduto = Convert.ToInt32(Session["IdProduto"]); } } }
Listagem 07. Recuperando o ID da Session

Faça os testes finais, alterando os valores do GridView.

Disponibilizo para download o código fonte completo do projeto neste próprio post.

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados