如何删除gridview上的特定记录行?

时间:2013-06-07 17:53:22

标签: asp.net vb.net

试。

在gridview标记上,我有以下内容:

   <asp:TemplateField HeaderText="Dates">
     <ItemTemplate>
      <asp:Label ID="dates_label runat="server" Text='<%# Bind("shipDates","{0:M/dd/yyyy}") %>'></asp:Label>
    </ItemTemplate> 
   </asp:TemplateField>


   <asp:TemplateField>
    <ItemTemplate>  
     <asp:HiddenField ID="ehide" Value='<%# Eval("eventId") %>' runat="server" />
    </ItemTemplate>
   </asp:TemplateField>

gridview显示几行记录并使用隐藏的表单字段,我能够将一行与其事件表中的特定eventid相关联。

然后下面是尝试删除每一行记录的代码隐藏。

    For Each row As GridViewRow In GridView1.Rows
        Dim dates_label = DirectCast(row.FindControl("dates_label"), Label)
        Dim shipDates = Date.ParseExact(dates_label.Value, "M/dd/yyyy", Nothing)

        Dim ehide = DirectCast(row.FindControl("ehide"), HiddenField)
        Dim eventid = ehide.Value

        Dim myConnectionString As [String] = ConfigurationManager.ConnectionStrings("DBConnectionString").ConnectionString
        Dim myConnection As New SqlConnection(myConnectionString)
        Try
            myConnection.Open()
            strSQL = "Delete from tblEvents where username=@UserName and eventid = @eventid"
            com = New SqlCommand(strSQL, myConnection)
            com.Parameters.AddWithValue("@username", Session("username"))
            com.Parameters.AddWithValue("@eventid", eventid)
            Response.Write(strSQL)
            Response.End()
            com.ExecuteNonQuery()
            myConnection.Close()
            Response.Write("<SCRIPT LANGUAGE='JavaScript'>alert('Information Saved successfully')</SCRIPT>")
            Response.Redirect("~/default.aspx")
        Catch ex As SqlException
            Response.Write("<SCRIPT LANGUAGE='JavaScript'>alert('" + ex.Message + "')</SCRIPT>")
        Finally
            myConnection.Close()
        End Try
    Next

当我在这个sub上运行一个调试器时,它会尝试删除第一个eventid的任何行。

例如,假设事件表上有5行记录,且eventID为1,2,3,4,5。为简洁起见,这些是由数字组成的。

如果我尝试删除eventId 1的第一条记录,我会得到:

从eventId = 1

的tblEvents中删除

如果我尝试删除eventId 5的行,我仍然会得到:

从eventId = 1

的tblEvents中删除

如何解决此问题,使每行被其rowId删除?

提前致谢。

1 个答案:

答案 0 :(得分:0)

基于我们讨论的假设。

  1. 您有一个启用了行选择的网格视图
  2. 您还启用了删除行。的 (EDIT: Just rememberd this option won't be available until you place the delete command in the SqlDataSource control)
  3. 即使是来自数据库
  4. 如果这一切都是真的那么删除行非常简单:

    1. 通过Property页面将eventid放在GridView1 DataKeyNames中。
    2. 从设计器中选择连接到GridView1的SqlDataSource控件
    3. 在SqlDataSource属性列表中

      • 一个。找到DeleteQuery并选择它(查询)
      • 湾这将打开“命令和参数编辑器”对话框
        1. 删除命令:"DELETE FROM tblEvents WHERE (username = @UserName) AND (eventid = @eventid)
        2. 点击对话框中的Refresh Parameters按钮
        3. 用户名:参数来源是会话,适当的是SessionField
        4. eventid:参数源为Control,ControlID为GridView1
    4. 全部保存

    5. 现在删除命令已“连接”到主键(eventid),删除应该正常工作