Asp.net 如何获取刚刚删除的记录的ID?

Asp.net 如何获取刚刚删除的记录的ID?,asp.net,vb.net,Asp.net,Vb.net,此代码用于获取已删除记录的ID、删除该记录的用户以及删除该记录的日期和时间,并将其插入主机表中 到目前为止,一旦删除了一条记录,代码就会捕获多条已删除的记录 请查看我的代码和我做错了什么 非常感谢你的帮助 Protected Sub GridView1_RowDeleted(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeletedEventArgs) Handles GridView1.Row

此代码用于获取已删除记录的ID、删除该记录的用户以及删除该记录的日期和时间,并将其插入主机表中

到目前为止,一旦删除了一条记录,代码就会捕获多条已删除的记录

请查看我的代码和我做错了什么

非常感谢你的帮助

    Protected Sub GridView1_RowDeleted(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeletedEventArgs) Handles GridView1.RowDeleted 
    Dim connStr As String = ConfigurationManager.ConnectionStrings("Constr").ConnectionString 
    Dim cnn As SqlConnection 
    Dim cmd As SqlCommand 
    Dim sql As String = "" 

    ' Indicate whether the delete operation succeeded.  

        If e.Exception Is Nothing Then 

            Dim strID As String = GridView1.FindControl("ID").Cells(1).Text 
            'Who deleted a record? 
            sql += "Insert into Archives ([ID],[choice],[date_stamp],[approved],[chcknum],[DeletedBy],[dateDeleted]) " 
            sql += " SELECT [ID],[choice],[date_stamp],[approved],[chcknum],[login],getDate() from Depends " 
            sql += " inner join  Emp on Depends.employee_id = Emp.employee_id where login ='" & Session.Item("UserName").ToString & "' and upass = '" & Session.Item("Password").ToString & "' and [ID] = '" & strID & "' " 
        End If 
    Response.Write(sql) 
    Response.End() 
    Try 
        cnn = New SqlConnection(connStr) 

        cnn.Open() 
        cmd = New SqlCommand(sql, cnn) 

        cmd.ExecuteNonQuery() 
        cmd.Dispose() 
        sql = "" 
    Catch ex As SqlException 
        Dim errorMsg As String = "Error in Updation" 
        errorMsg += ex.Message 
        Throw New Exception(errorMsg) 
    Finally 
        cnn.Close() 
    End Try 
End Sub
我认为我的问题在于这一行代码:

Dim strID As String=GridView1.FindControlID.Cells1.Text


我认为这是不对的。

我猜你是在找那个。使用它告诉GridView数据中的哪些列应该用作唯一标识符

您可能还想研究代码的其他一些优化:

在查询中使用参数,不要像那样连接SQL语句。 将与SqlConnection和SqlCommand对象一起使用,以便进行适当和轻松的处理。 使用try-catch并没有取得任何成果,事实上,您掩盖了异常堆栈。 更新:

请参阅以获取已删除行的ID。ID列是用于绑定GridView的查询的一部分吗

下面是一个更好的完整示例:

.aspx:

<asp:GridView ID="GridView1" DataKeyNames="ID" AutoGenerateDeleteButton="true" runat="server">
</asp:GridView>

如果您正在运行SQL Server,那么在表上使用delete触发器可能会更容易


…删除和插入的是逻辑概念表。它们在结构上类似于定义触发器的表,即尝试执行用户操作的表,并保存可能由用户操作更改的行的旧值或新值

为什么不在删除之前先找到ID呢?嗨,希万。你能告诉我怎么做或者至少举个例子说明怎么做吗?我在标记上有这个:谢谢。这完全正确,Jakob,这就是我正在使用的:Dim StrID=GridView1.DataKeyse.RowIndex.ItemID.ToString,但我一直得到一个错误,RowIndex不是system.web.ui的成员。。。我需要在代码中更改什么?非常感谢您提供的提示。我仍然对如何获取GridViewDeledEventArgs.Keys属性感到非常困惑。我已经看过了链接。用户一次删除一行。那么,如何将ID datakey传递给带有WhERE的select语句呢[ID}='&strID&'你绝对是上帝派来的。谢谢你,雅各布。现在,我得到了已删除记录的ID,但由于某种原因,现在它不再将数据插入存档。它以前也这样做过。所以,我应该使用行\ u删除,而不是行\ u删除?还有,雅各布,当我运行调试器时,我得到了重复的条目。这听起来更像是我的错误与从GridView获取ID相比,您的SQL存在一个问题:
Public Class _Default
  Inherits System.Web.UI.Page

  Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not Page.IsPostBack Then
      Dim x() = {New With {.id = 1, .name = "xxx"}, New With {.id = 2, .name = "zzz"}}
      GridView1.DataSource = x
      GridView1.DataBind()
    End If
  End Sub

  Private Sub GridView1_RowDeleting(sender As Object, e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GridView1.RowDeleting
    Dim id As Integer = CInt(e.Keys(0))
    ' Do your stuff!
    ' Don't forget to rebind the GridView, it will still have the deleted row in Viewstate.
  End Sub
End Class