Ir para conteúdo

POWERED BY:

Arquivado

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

SID_SILVA

Exclusao de Registro no GridView

Recommended Posts

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

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

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

×

Informação importante

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