ASP .NET - GridView :  Enviando os valores de uma linha para outra página e atualizando os valores


Neste artigo vou mostrar como podemos enviar os valores de  uma linha selecionada em um GridView e a seguir atualizar os valores e refletir essa atualização no GridView original.

Eu tenho escrito muitos artigos abordando o componente GridView da ASP .NET, e, embora não ele seja perfeito, ele pode ser usado de diversas formas para exibir dados e criar uma interface com o usuário mais amigável.

Embora a ASP .NET seja uma tecnologia ultrapassada ela ainda vai continuar sendo usada por um bom tempo devido ao legado existente então por isso continuo escrevendo sobre ASP .NET.

Neste artigo eu vou abordar novamente o GridView mostrando como você pode enviar as linhas selecionadas de um controle GridView para outra página atualizar os valores e atualizar o GridView.

No exemplo deste artigo eu crie um banco de dados chamado Cadastro.mdf  e estou usando a tabela Produtos que tem a seguinte estrutura: (Fique a vontade para usar outra fonte de dados)

CREATE TABLE [dbo].[Produtos] (
    [Id]        INT            IDENTITY (1, 1) NOT NULL,
    [Nome]      NVARCHAR (50)  NOT NULL,
    [Descricao] NVARCHAR (150) NULL,
    [Preco]     MONEY          NOT NULL,
    [Estoque]   INT            NULL,
    CONSTRAINT [PK_Produtos] PRIMARY KEY CLUSTERED ([Id] ASC)
);

A string de conexão definida para este banco de dados é definida no arquivo Web.Config:

....
<connectionStrings>
    <add name="conexaoBD" connectionString="Data Source=.\;Initial Catalog=Cadastro;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
...

Então vamos arregaçar as mangas e partir para o que interessa...

Recursos usados:

Criando o projeto ASP .NET Web Forms e incluindo a página Default.aspx

Abra o VS Community 2017 e clique em New Project;

Selecione a linguagem Visual C# -> WEB -> ASP .NET Web Aplication (.NET Framework), Informe o nome Aspnet_GridViewOutraPagina e clique no botão OK;

A seguir selecione o template Empty e marque Web Forms, sem autenticação nem hospedagem na nuvem e clique em OK;

Vamos incluir uma página web no projeto.

No menu Project clique em Add New Item;

Selecione o template Web e a seguir Web Form e informe o nome Default.aspx e clique em Add;

Repita o procedimento acima e crie um novo Web Form com o nome AtualizaDados.aspx. Teremos assim as duas páginas prontas para usarmos no projeto.

Definindo o GridView na página Default.aspx

Abra a página Default.aspx e a partir da ToolBox inclua um controle GridView na página definindo sua coonfiguração conforme mostrado a seguir:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Aspnet_GridViewOutraPagina.Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Atualziando GridView em outra página</title>
</head>
<body>
    <h1><a href="http://www.macoratti.net">Macoratti .net</a></h1>
    <hr />
    <form id="form1" runat="server">
            <div>
            <asp:GridView ID="gdvProdutos" HeaderStyle-BackColor="#3AC0F2" HeaderStyle-ForeColor="White" runat="server" 
AutoGenerateColumns="false" OnRowCommand="gdvProdutos_RowCommand" Height="273px" Width="581px">
                <Columns>
                    <asp:BoundField DataField="Id" HeaderText="Id" />
                    <asp:BoundField DataField="Nome" HeaderText="Nome" />
                    <asp:BoundField DataField="Descricao" HeaderText="Descricao" />
                    <asp:BoundField DataField="Preco" HeaderText="Preco" />
                    <asp:BoundField DataField="Estoque" HeaderText="Estoque" />
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:Button ID="btnEditar" runat="server" Width="60" Text="Editar" CommandName="EditButton" 
CommandArgument="<%# ((GridViewRow) Container).RowIndex %>" />
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
        </div>
    </form>
</body>
</html>

A seguir abra o arquivo Default.aspx.cs e defina o seguinte código no code-behind:

using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
namespace Aspnet_GridViewOutraPagina
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack)
            {
                VinculaGridView();
            }
        }
        private void VinculaGridView()
        {
            string constr = ConfigurationManager.ConnectionStrings["conexaoBD"].ConnectionString;
            SqlConnection con = new SqlConnection(constr);
            SqlCommand cmd = new SqlCommand("SELECT * FROM Produtos", con);
            DataTable dt = new DataTable();
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            da.Fill(dt);
            gdvProdutos.DataSource = dt;
            gdvProdutos.DataBind();
        }
           protected void gdvProdutos_RowCommand(object sender, System.Web.UI.WebControls.GridViewCommandEventArgs e)
        {
            if (e.CommandName == "EditButton")
            {
                int index = Convert.ToInt32(e.CommandArgument);
                GridViewRow row = gdvProdutos.Rows[index];
                Response.Redirect("~/AtualizaDados.aspx?Id=" + row.Cells[0].Text);
            }
        }
    }
}

Neste código definimos o método VinculaGridView() que acessa a string de conexão do arquivo web.config e seleciona os produtos da tabela exibindo no GridView.

No evento RowCommand do GridView definimos o código que verifica se o botão clicado é o botão EditButton e a seguir obtemos o índice da linha e com base no índice obtemos o valor da célula passando para a página AtualizaDados.aspx.

Definindo na página a AtualizaDados.aspx

Abra a página AtualizaDados.aspx e inclua o código abaixo nesta página:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AtualizaDados.aspx.cs" 
Inherits="Aspnet_GridViewOutraPagina.AtualizaDados" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
           <table>    
               <tr>    
                   <td>Id</td>    
                   <td>    
                       <asp:TextBox ID="txtId" runat="server" ReadOnly="true" />    
                   </td>    
               </tr>    
               <tr>    
                   <td>Nome</td>    
                   <td>    
                       <asp:TextBox ID="txtNome" runat="server" />    
                   </td>    
               </tr>    
               <tr>    
                   <td>Descrição</td>    
                   <td>    
                       <asp:TextBox ID="txtDescricao" runat="server" />    
                   </td>    
               </tr>    
               <tr>    
                   <td>Preço</td>    
                   <td>    
                       <asp:TextBox ID="txtPreco" runat="server" />    
                   </td>    
               </tr>    
               <tr>    
                   <td>Estoque</td>    
                   <td>    
                       <asp:TextBox ID="txtEstoque" runat="server" />    
                   </td>    
               </tr>    
               <tr>    
                   <td align="center">    
                        <asp:Button ID="btnAtualiza" runat="server" Text="Atualizar" OnClick="btnAtualiza_Click" />    
                   </td>    
                   <td align="center">    
                       <asp:Button ID="btnCancela" runat="server" Text="Cancelar" OnClick="btnCancela_Click" />    
                   </td>    
               </tr>    
           </table>    
        </div>
    </form>
</body>
</html>

A seguir abra o arquivo AtualizaDados.aspx.cs e defina o código a seguir:

using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Web.UI;
namespace Aspnet_GridViewOutraPagina
{
    public partial class AtualizaDados : System.Web.UI.Page
    {
        int codigo = 0;
        protected void Page_Load(object sender, EventArgs e)
        {
            codigo = Convert.ToInt32(Request.QueryString["Id"].ToString());
            if (!IsPostBack)
            {
                VinculaDados();
            }
        }
        private void VinculaDados()
        {
            string constr = ConfigurationManager.ConnectionStrings["conexaoBD"].ConnectionString;
            SqlConnection con = new SqlConnection(constr);
            SqlCommand cmd = new SqlCommand("select * from Produtos where Id=" + codigo, con);
            DataTable dt = new DataTable();
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            da.Fill(dt);
            txtId.Text = dt.Rows[0][0].ToString();
            txtNome.Text = dt.Rows[0][1].ToString();
            txtDescricao.Text = dt.Rows[0][2].ToString();
            txtPreco.Text = dt.Rows[0][3].ToString();
            txtEstoque.Text = dt.Rows[0][4].ToString();
        }
        protected void btnAtualiza_Click(object sender, EventArgs e)
        {
            string constr = ConfigurationManager.ConnectionStrings["conexaoBD"].ConnectionString;
            SqlConnection con = new SqlConnection(constr);
            string sql = "UPDATE Produtos SET Nome = '" + txtNome.Text + "',Descricao = '" + txtDescricao.Text + "',Preco = " +
 Convert.ToDecimal(txtPreco.Text) + ",Estoque = " + Convert.ToInt32(txtEstoque.Text) + " where Id = " + Convert.ToInt32(codigo);
            SqlCommand cmd = new SqlCommand(sql, con);
            con.Open();
            int result = cmd.ExecuteNonQuery();
            con.Close();
            if (result == 1)
            {
                ScriptManager.RegisterStartupScript(this, this.GetType(), "ShowSuccess", "javascript:alert('Registro atualizado com sucesso');", true);
            }
            Response.Redirect("~/Default.aspx");
        }
        protected void btnCancela_Click(object sender, EventArgs e)
        {
            Response.Redirect("~/Default.aspx");
        }
    }
}

Executando o projeto iremos obter o seguinte resultado:

A clicar no botão Editar da página Default.aspx os dados serão exibidos na página AtualizaDados.aspx .

Basta atualizar os valores desejados e clicar no botão Atualizar para atualizar os dados.

Pegue o projeto completo aqui : Aspnet_GridViewOutraPagina.zip (sem as referências)

"E o mundo passa, e a sua concupiscência; mas aquele que faz a vontade de Deus permanece para sempre."
1 João 2:17

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET ?

 

 

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

 

Referências:


José Carlos Macoratti