2011-09-13 4 views
4

여기에 큰 문제가 있습니다. 내 서버쪽에 자바 스크립트를 추가 할 수 있었지만 문제는 삭제되지 않았습니다. 오류가 발생 나던 그것은 내가 어디서부터 시작 모른다 :GridView ImageButton 레코드 확인 및 삭제

Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView1.RowCommand 
    If e.CommandName = "cmdDelete" Then 
     Dim ID As Integer = Convert.ToInt32(e.CommandArgument) 
    End If 
End Sub 
Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound 
    If e.Row.RowType = DataControlRowType.DataRow Then 
     Dim l As ImageButton = DirectCast(e.Row.FindControl("ImageDelete"), ImageButton) 
     l.Attributes.Add("onclick", "javascript:return " & "confirm('Are you sure you want to delete this record " & DataBinder.Eval(e.Row.DataItem, "ID") & "')") 
    End If 
End Sub 

Protected Sub GridView1_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GridView1.RowDeleting 
    Dim ID As Integer = CInt(GridView1.DataKeys(e.RowIndex).Value) 
    'dim ID as Integer 
    con.Open() 
    'gridview1.rows(e.rowindex).cells(0) 
    Dim cmd As New SqlCommand("delete from [tblUser] where [ID][email protected]", con) 
    cmd.Parameters.AddWithValue("@ID", ID) 
    cmd.ExecuteNonQuery() 
    con.Close() 
End Sub 

클라이언트 측 ImageDelete 버튼을 누를 때

 <asp:TemplateField HeaderText="Delete"> 
    <ItemTemplate> 
     <asp:ImageButton ID="ImageDelete" ImageUrl="" runat="server" CommandName="cmdDelete" CommandArgument='<%# Eval("ID") %>' 
    /> 
    </ItemTemplate> 
    </asp:TemplateField> 
    </Columns 
+1

당신이 자바 스크립트 확인 메시지가 표시됩니다? 그리고 예/ok를 누르면 RowCommand 이벤트가 발생합니까? – Waqas

답변

1

을 ID를 데이터 키로 GridView에 추가하든 상관 없습니다.

<asp:GridView ID="GridView1" runat="server" DataKeyNames="ID" ...> 

그리고 난 당신이 삭제 로직의 ID를 검색하는 방법에 문제가있을 수 있습니다 생각 :

Dim ID As Integer = Convert.ToInt32(GridView1.DataKeys(e.RowIndex)("ID")) 
2

, RowCommand 이벤트가 발생합니다. 그러나 RowCommand에 대한 이벤트 처리기에서는 삭제하지 않습니다. 반면에 RowDeleting 이벤트는 전혀 발생하지 않습니다.이 이벤트에 대한 올바른 명령은 cmdDelete이 아니라 Delete입니다.

두 가지 가능한 수정 방법이 있습니다. 첫째 - RowCommand 이벤트 핸들러에 삭제 작업을위한 코드를 이동 :

Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView1.RowCommand 
    If e.CommandName = "cmdDelete" Then 
     Dim ID As Integer = Convert.ToInt32(e.CommandArgument) 

     con.Open() 
     Dim cmd As New SqlCommand("delete from [tblUser] where [ID][email protected]", con) 
     cmd.Parameters.AddWithValue("@ID", ID) 
     cmd.ExecuteNonQuery() 
     con.Close() 

    End If 
End Sub 

둘째 - 명령 이름을 변경하고 이미 구현 RowDeleting 핸들러 사용 : 당신은 당신의 마크 업에 표시되지 않은

<asp:ImageButton ID="ImageDelete" ImageUrl="" runat="server" CommandName="Delete" CommandArgument='<%# Eval("ID") %>' /> 
+0

내가 한 일은 클라이언트 측에서 를 추가하고 현재 작동합니다. – Janwel

+0

@Janwel, 실제로 제가 설명한 문제에 대한 또 다른 가능한 수정입니다. 'CommandField'의 Delete 버튼은 서버에'Delete' 명령을 보내면'RowDeleting' 이벤트가 발생합니다. 그것이 작동하는 이유입니다. – Andrei

+0

고맙습니다. 선생님. – Janwel