GridView ImageButton подтверждает и удаляет запись - PullRequest
4 голосов
/ 13 сентября 2011

У меня здесь огромная проблема.Мне удалось добавить 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 ]

2 голосов
/ 13 сентября 2011

При нажатии кнопки 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 голос
/ 13 сентября 2011

Вы не указали в своей разметке, добавляете ли вы ID как ключ данных в GridView.

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

И я думаю, что у вас может быть проблема с тем, как вы извлекаете идентификатор в логике удаления:

Dim ID As Integer = Convert.ToInt32(GridView1.DataKeys(e.RowIndex)("ID"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...