2011-09-13 59 views
4

我在這裏遇到了一個很大的問題。我已經設法添加JavaScript到我的服務器端,但它沒有刪除的問題。它沒有產生任何錯誤,所以我不知道從哪裏開始: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 

客戶端

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

是你看到的JavaScript確認消息?當你按下/確定它會引發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

當按下按鈕ImageDelete,發生RowCommand事件。但是,在RowCommand的事件處理程序中,您並未刪除任何內容。另一方面,RowDeleting事件根本不會發生,因爲此事件的正確命令是Delete,而不是cmdDelete

我看到兩個可能的解決方法。首先 - 移動你的代碼,刪除操作到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'命令發送到服務器,導致發生'RowDeleting'事件。這就是它工作的原因。 – Andrei

+0

多謝先生 – Janwel