Emerson 0 Denunciar post Postado Agosto 15, 2009 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
Ivan.Teles 23 Denunciar post Postado Agosto 15, 2009 Tenta dá um data Bind no grid após deletar a linha! Compartilhar este post Link para o post Compartilhar em outros sites
Emerson 0 Denunciar post Postado Agosto 15, 2009 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
Ivan.Teles 23 Denunciar post Postado Agosto 15, 2009 Faz assim então no evento RowDeleted, chama seu método vinculaGridView(); Compartilhar este post Link para o post Compartilhar em outros sites
Emerson 0 Denunciar post Postado Agosto 16, 2009 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
quintelab 91 Denunciar post Postado Agosto 17, 2009 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
Emerson 0 Denunciar post Postado Agosto 17, 2009 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