Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

alexandremanowar

[Resolvido] Erro no update

Recommended Posts

Boa tarde

 

Pessoal estou estudando asp.net e estou usando c# como linguagem criei um grid e adionei neles os botões edit, update e cancel. Todos estão funcionando bem criei os eventos e esta rudo ok, o único problema esta no botão update que fiz ele esta pegando os dados da do grid antes de eu editar! Tipo o grid é carregado na tela então clico no botão edit ele abre a linha para digitação, digito os dados e clico no update, quando clico no update ele manda para o banco de dados as informações do célular antes da edição ou seja o que estava ao invés de pegar os dados que acabeio de digitar! Olha como fiz a captura:

 

 

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
       
       
        TextBox Valor = (TextBox)GridView1.Rows[e.RowIndex].Cells[1].Controls[0];

        Label1.Text = Valor.Text;
        Conexao ExecutaStringSQL = new Conexao();
        ExecutaStringSQL.ExecutarComando("update senha set usuario='" + Valor.Text  + "' ");        
        //atualiza a consulta no grid
        GridView1.EditIndex = -1;
        Grid();
    }
Repare que com essa linha:

TextBox Valor = (TextBox)GridView1.Rows[e.RowIndex].Cells[1].Controls[0];

 

Eu capturo o valor da célula mas ao invés de capturar o valor que esditei esta me trazendo o valor que já estava na célular antes da edição logo ele termina gravando o banco o que já estava, eu coloquei essa linha:

 

 

Label1.Text = Valor.Text;

justamente para ver isso quando clico no atualizar ele ignora o valor editado e pega o que já estava na célula! Onde estou errando?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, se você ta usando a template de edição num precisa capturar nada no evento row updating não, posta seu código ai.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema é que você deve estar carregando este grid no Page_Load, e no momento do Update ele entra no Page_Load novamente e recarrega a grid com os valores antigos.

Utilize no Page_Load:

 

if(!IspotBack)
{
  //Carrega sua grid
}

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite a todos

 

Então já ouvi falar dessa opção que o quintelab deixou mas acredito que devo adicionar mais alguma coisa para usar ela pois ao usar ela esta me dando a seguinte mensagem no comando IsPostback:

 

The name IsPostback does not exist in the current context

 

Olha como coloquei:

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostback)
        {
            Grid();
        }

    }
Conforme o Ivan pediu vou adicionar meu código aqui para análise, porém eu acho que a solução do quintlab deve funcionar:

 

código:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls.WebParts;

public partial class Home : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostback)
        {
            Grid();
        }

    }
    protected void Button1_Click(object sender, EventArgs e)
    {

        Conexao ExecutaStringSQL = new Conexao();

        using (SqlDataReader Busca = ExecutaStringSQL.RetornarDataReader("select top 1 * from senha "))
        {
            if (Busca.HasRows)
            {
                Busca.Read();
                Label1.Text = Busca.GetString(0);
            }
        }

        
        
     
        

    }

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
        }
    }




    protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
    {
        GridView1.EditIndex = e.NewEditIndex;

        Grid();
        
    }
    protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
    {
        GridView1.EditIndex = -1;

    }

    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
       
       
        TextBox Valor = (TextBox)GridView1.Rows[e.RowIndex].Cells[1].Controls[0];

        Label1.Text = Valor.Text;
        Conexao ExecutaStringSQL = new Conexao();
        ExecutaStringSQL.ExecutarComando("update senha set usuario='" + Valor.Text  + "' ");  
        
        
        GridView1.EditIndex = -1;
        Grid();
    }


    private void Grid()
    {
        Conexao ExecutaStringSQL = new Conexao();
        DataSet ListaDados = new DataSet();

        ListaDados = ExecutaStringSQL.BuscarDados("select * from senha ");
        GridView1.DataSource = ListaDados;
        GridView1.DataBind();
        
    }

  
}

e aqui esta o html:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Home.aspx.cs" Inherits="Home" EnableEventValidation="false" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
        Bem vindo<br />
        <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
        <br />
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    
        <br />
        <br />
    
        <br />
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
            onrowdatabound="GridView1_RowDataBound" 
            BackColor="White" BorderColor="#999999" BorderStyle="None" BorderWidth="1px" 
            CellPadding="3" PageSize="3" 
            onrowediting="GridView1_RowEditing"
            onrowupdating="GridView1_RowUpdating"
            onrowcancelingedit="GridView1_RowCancelingEdit" 

            
            
             
             >
            <RowStyle BackColor="#EEEEEE" ForeColor="Black" />
            <Columns>
                <asp:BoundField DataField="nome" HeaderText="Nome" SortExpression="nome" />
                <asp:BoundField DataField="usuario" HeaderText="Usuário" 
                    SortExpression="usuario" />
                <asp:BoundField DataField="senha" HeaderText="Senha" SortExpression="senha" />
                <asp:BoundField DataField="data" HeaderText="Data" SortExpression="data" />
                <asp:BoundField DataField="hora" HeaderText="Hora" SortExpression="hora" />
                <asp:ButtonField ButtonType="Button" CommandName="Edit" Text="Editar" />
                <asp:ButtonField ButtonType="Button" CommandName="Update" Text="Atualizar" />
                <asp:ButtonField ButtonType="Button" CommandName="Cancel" Text="Cancelar" />
            </Columns>
            <FooterStyle BackColor="#CCCCCC" ForeColor="Black" />
            <PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
            <SelectedRowStyle BackColor="#008A8C" Font-Bold="True" ForeColor="White" />
            <HeaderStyle BackColor="#000084" Font-Bold="True" ForeColor="White" />
            <AlternatingRowStyle BackColor="Gainsboro" />
        </asp:GridView>
        <br />
        <br />
    
    </div>
    </form>
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite

 

Pessoal resolvi o problema era o que o quintelab falou eu estava errando porque estava colocando errado, depois de algumas pesquisas achei o modo certo:

if (!Page.IsPostBack)
        {
            Grid();
        }

O problema era que ele estava buscando os dados do pageload ao invés de atualizar os dados como nosso amigo falou

 

Obrigado a todos pela ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.