Ir para conteúdo

POWERED BY:

Arquivado

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

Emerson

RowDeleting executando duas vezes sem ser solicitado

Recommended Posts

Olá pessoal, estou quebrando a cabeça com o evento rowDeleting do gridView.

 

Acontece o seguinte, tenho um gridView carregado com uma dataTable, e assim que eu clico no botão para excluir o registro de uma determinada linha, ele entra no método, exclui normalmente, mas ao terminar ele repete o método novamente.

 

Alguém saberia me dizer porque isso acontece?

 

Desde já agradeço!

 

ASP.NET

        <asp:GridView ID="dadosGridView" runat="server" AutoGenerateColumns="False" OnRowDeleting="dadosGridView_RowDeleting">
           <Columns>
               <asp:BoundField DataField="Nome" HeaderText="Nome" />
               <asp:BoundField DataField="Telefone" HeaderText="Telefone" />
               <asp:CommandField ButtonType="Image" EditImageUrl="~/alterar.jpg" ShowEditButton="True" />
               <asp:CommandField ButtonType="Image" DeleteImageUrl="~/icone_excluir.jpg" ShowDeleteButton="True" />
           </Columns>
       </asp:GridView>

 

CS

 

protected void dadosGridView_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {


        if (e.RowIndex >= 0)
        {
            
            tabela.Rows.RemoveAt(e.RowIndex);

            vinculaGridView();
            
        }

    }

Compartilhar este post


Link para o post
Compartilhar em outros sites

jivandf o método vinculaGridView() que eu chamo após tabela.Rows.RemoveAt(e.RowIndex) faz exatamente isso como segue abaixo:

 

private void vinculaGridView()
    {
        dadosGridView.DataSource = ds.Tables["Agenda"];
        dadosGridView.DataBind();
    }

É o método dadosGridView_RowDeleting que eu havia colocado anteriormente que executa duas vezes.

Assim que ele sai da chave do método ele retorna para a linha do if "if (e.RowIndex >= 0)"

E esse método esta configurado para ser chamado apenas quando eu clico para excluir alguma linha do GridView.

 

<asp:GridView ID="dadosGridView" runat="server" AutoGenerateColumns="False" OnRowDeleting="dadosGridView_RowDeleting">

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realizei mais alguns teste e vi que na segunda vez que ele passa no método ele vem do Load da página, sendo que eu não coloquei o método para ser chamado no load, ele é chamado somente quando eu clico no botão de excluir do gridView....ou seja o que está acontecendo é que eu clico no botão para excluir, ele entra no método a página dá um Load e sabe-se lá porque ele executa o método de excluir novamente.

 

Em um outro teste eu criei um textBox e um botão na mesma tela. No textBox eu insiro o indice da linha que eu desejo excluir do gridView. Desta maneira ele funcionou perfeitamente, ele excluiu somente a linha que eu desejava...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Movido Plataforma .NET http://forum.imasters.com.br/public/style_emoticons/default/seta.gif Plataforma .NET > Web Applications

 

Existe algo no Page_Load que carregue a grid ou que carregue algum método referente a grid?

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realizei mais alguns testes e percebi que esse erro acontece somente quando utilizo uma imagem como botão no grid. Quando é um link ou um botão padrão ele funciona corretamente.

 

Desse modo ocorre o erro:

<asp:CommandField ShowDeleteButton="true" DeleteImageUrl="~/icone_excluir.jpg" ButtonType="Image" />

 

Nos dois modos abaixo funciona corretamente.

<asp:CommandField ShowDeleteButton="true" ButtonType="Link" />

<asp:CommandField ShowDeleteButton="true" ButtonType="Button" />

 

 

quintelab, no Page_Load eu gero o DataSet e vinculo ao grid, mas utilizando o PostBack conforme segue abaixo:

 

 

 

protected void Page_Load(object sender, EventArgs e)

{

if (!Page.IsPostBack)

{

geraTabela();

vinculaGridView();

}

}

 

private static DataSet ds = null;

private static DataTable tabela = null;

 

 

public void geraTabela()

{

ds = new DataSet();

tabela = new DataTable("Agenda");

tabela.Columns.Add("Material",typeof(System.String));

tabela.Columns.Add("Quantidade",typeof(System.Int32));

tabela.Columns.Add("Unitario", typeof(System.Int32));

tabela.Columns.Add("Total",typeof(System.Int32));

 

ds.Tables.Add(tabela);

 

}

 

 

private void vinculaGridView()

{

dadosGridView.DataSource = ds.Tables["Agenda"];

dadosGridView.DataBind();

}

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.