GridView ImageButton确认并删除记录

时间:2011-09-13 02:05:47

标签: javascript asp.net vb.net gridview

我在这里遇到了很大的问题。我已经设法将javascript添加到我的服务器端,但问题是它没有删除。它没有产生任何错误,所以我不知道从哪里开始:

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]=@ID", 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

2 个答案:

答案 0 :(得分: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]=@ID", 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") %>' />

答案 1 :(得分:1)

您没有在标记中显示是否将ID作为数据键添加到GridView。

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

我认为您在删除逻辑中检索ID的方式可能有问题:

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