SID_SILVA 0 Denunciar post Postado Julho 16, 2009 Bom Dia Amigos Mudaram o lay out forum.Ficou mais suave eu acho.Poderiam ter colocado mais algumas funcoes,como por exemplo exibir apenas os topicos do usuario.Pois as vezes voce quer ler topicos antigos e tem que procura-los. Nao sei se falei besteira mas eu ja procurei essa opcao e nao encontrei.Mas de qualquer maneira e realmente muito bom ter um forum como esse, onde as pessoas se ajudam mutuamente, nao e mesmo? Bem, vamos ao que interessa, o problema do momento. Apos quebrar um pouco a cabeça, consegui finalmente concluir minha rotina de exclusao.Alias ultimamente tudo tem sido um desafio para mim em ASP.NET, ate as operacoes mais simples. Utilizei os exemplos abaixo como referencia. http://www.linhadecodigo.com.br/Artigo.aspx?id=961 http://www.codeproject.com/KB/webforms/GridViewConfirmDelete.aspx Minha rotina de exclusao, esta excluindo normalmente mas existem alguns probleminhas para variar. 1 - Li que o evento RowDataBound e executado a cada linha que e criada do GridView, ou quando ha um postback. Por que a execucao do sistema passa varias vezes por essa linha,mesmo depois que o registro foi excluido? Inclusive eu estou passando novamente pela rotina de exclusao do registro, o que ira ocasionar uma mensagem de erro. 2 - Como resolver isso? 3 - Li nos exemplos que eu posso excluir os usando o evento RowCommand ou Rowdeleting,usei o RowCommand.Um e melhor ou pior do que o outro nesse caso? Protected Sub GrdDocumentos_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GrdDocumentos.RowCommand 'Posso excluir aqui no RowCommand If e.CommandName = "Excluir" Then ' get the categoryID of the clicked row Dim RELID As Integer = Convert.ToInt32(e.CommandArgument) ' Uma das formas de se pegar a chave primaria ' Delete the record ' Implement this on your own :) DeleteRecordByID(RELID) ' Function End If End Sub Protected Sub GrdDocumentos_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GrdDocumentos.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then Dim l As LinkButton = DirectCast(e.Row.FindControl("LinkButton1"), LinkButton) l.Attributes.Add("onclick", ("javascript:return " & "confirm('Deseja Realmente Excluir o Documento ") & DataBinder.Eval(e.Row.DataItem, "REL_DOCUMENTO") & "?')") End If End Sub Private Sub DeleteRecordByID(ByVal RegID As Integer) Dim Sql As String Dim cmd As SqlCommand Dim conexao As SqlConnection conexao = New SqlConnection(ConfigurationManager.ConnectionStrings("timesheet").ConnectionString) Sql = "DELETE FROM REL_PROJETOS " Sql += " WHERE REL_ID=" & RegID cmd = New SqlCommand(Sql, conexao) Try conexao.Open() cmd.Connection = conexao cmd.CommandType = CommandType.Text cmd.CommandText = Sql cmd.ExecuteNonQuery() Catch ex As Exception lblMensagem.Text = "Ocorreu um Erro Durante a Exclusão : " & vbCrLf & ex.Message & vbCrLf ' & ex.InnerException.ToString Finally conexao.Close() GrdDocumentos.DataBind() End Try End Sub Obrigado e um Abraço Compartilhar este post Link para o post Compartilhar em outros sites
Juliano.net 2 Denunciar post Postado Julho 16, 2009 Vamos por partes: 1 - Li que o evento RowDataBound e executado a cada linha que e criada do GridView, ou quando ha um postback. Por que a execucao do sistema passa varias vezes por essa linha,mesmo depois que o registro foi excluido? Inclusive eu estou passando novamente pela rotina de exclusao do registro, o que ira ocasionar uma mensagem de erro. Isso deve estar acontecendo provavelmente porque no seu código do método DeleteRecordById, você simplesmente executa o DataBind() do Grid após o Finally, ou seja, ele irá reaproveitar os dados que estão no seu DataSet. 2 - Como resolver isso? Suponho que o problema seja o que citei no item 1, por isso, no Finally, execute novamente o procedimento que realiza a carga dos itens para o DataSet novamente e só assim execute o DataBind(). 3 - Li nos exemplos que eu posso excluir os usando o evento RowCommand ou Rowdeleting,usei o RowCommand.Um e melhor ou pior do que o outro nesse caso? Acredito que não haja diferença. Quando é executado RowDeleting, acredito que seja porque a classe encapsulou a lógica que verifica se o RowCommand é "Delete" e redirecionou para o evento de Delete diretamente. Mas não tenho certeza também sobre o encapsulamento. Compartilhar este post Link para o post Compartilhar em outros sites
SID_SILVA 0 Denunciar post Postado Julho 16, 2009 Boa tarde Junliano Obrigado novamente por sua ajuda. Voce escreveu isso: "Isso deve estar acontecendo provavelmente porque no seu código do método DeleteRecordById, você simplesmente executa o DataBind() do Grid após o Finally, ou seja, ele irá reaproveitar os dados que estão no seu DataSet." Bem, eu nao estou usando DataSet, logo nao entendi sua explicacao. Obrigado e um Abraço Compartilhar este post Link para o post Compartilhar em outros sites
Juliano.net 2 Denunciar post Postado Julho 16, 2009 Você está usando BindingSource? Compartilhar este post Link para o post Compartilhar em outros sites