DevMedia
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login

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.

[fechar]

Você não gostou da qualidade deste conteúdo?

(opcional) Você poderia comentar o que não lhe agradou?

Confirmo meu voto negativo
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.

Listagem 01 - Propriedade IdProduto, usando ViewState
public Int32 IdProduto
        {
            get
            {
                if (ViewState["IdProduto"] != null)
                    return Convert.ToInt32(ViewState["IdProduto"]);

                return 0;
            }
            set
            {
                ViewState["IdProduto"] = value;
            }
        }
Obs: 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.

Listagem 02 - Evento Page Load
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"]);
                }
            }
        }
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.

Listagem 03 - Instrução SQL de Update
public string strUpdate = "UPDATE Products SET " + 
                          " ProductName = @ProductName, UnitPrice = @UnitPrice, " + 
                          " UnitsInStock = @UnitsInStock " + 
                          " WHERE ProductID = @ProductID";
A Listagem 04 ilustra o método para atualizar os dados. Listagem 04 - Método AtualizarValores
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();
                    }
                }
            }
        }
Obs: 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.

Listagem 05 - Evento click do botão
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");
            }
        }
Obs: 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.

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

Listagem 07 - Recuperando o ID da Session
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"]);
                }
            }
        }
Faça os testes finais, alterando os valores do GridView.

Disponibilizo para download o código fonte completo do projeto neste próprio post.
Assim finalizo o artigo. Muito obrigado a todos!

Um abraço, e até o próximo artigo.

Wellington Balbo de Camargo


Tecnólogo em Análise de Sistemas, atua na área de Desenvolvimento .NET com aplicações Web a 2 anos, onde trabalha atualmente com a linguagem C# usando a tecnologia ASP.NET, no desenvolvimento em camadas usando o banco de dados SQL [...]

O que você achou deste post?
Conhece a assinatura MVP?
Publicidade
Serviços

Mais posts