【问题标题】:How do I delete specific row of records on gridview?如何删除gridview上的特定记录行?
【发布时间】:2013-06-07 17:53:21
【问题描述】:

再次。

在 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 行记录,事件 ID 为 1、2、3、4、5。为简洁起见,这些是由数字组成的。

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

从 eventId = 1 的 tblEvents 中删除

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

从 eventId = 1 的 tblEvents 中删除

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

提前致谢。

【问题讨论】:

  • 你能不能把ehide的代码贴在asp:TemplateField里面,去掉asp.net-mvc标签,因为问题不是mvc
  • @win,很抱歉 mvc 是一个错误。我想选择asp.net。感谢您纠正它。另外,非常抱歉,我发布了错误的代码。我现在已经发布了正确的代码。顺便说一句:如果有帮助,eventid 是整数。谢谢
  • 为什么要重定向到循环中间的页面?
  • also - eventid 是主键,因此通常存储在 GridView DataKeyNames 集合中。将其添加为模板 HiddenField 是不好的。
  • @Kenny 你能确定从数据库中检索到的所有数据都有不同的eventId吗?换句话说,eventId 并不是所有行都为 1。

标签: asp.net vb.net


【解决方案1】:

基于我们讨论的假设。

  1. 您有一个启用了行选择的网格视图
  2. 您还启用了删除行。 (EDIT: Just rememberd this option won't be available until you place the delete command in the SqlDataSource control)
  3. 那个 eventid 来自数据库

如果这一切都是真的,那么删除行非常容易:

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

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

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

【讨论】:

  • 非常感谢您的努力。我仍然有同样的问题。当我单击删除时,我不想 删除所有内容。我只想删除我单击的行。这就是为什么我以 id 1,2,3,4,5 为例。如果我单击 ID 为 1 的行,我只想删除该行。如果我单击 ID 为 2 的另一行,我只想删除该行。我想删除我再次单击的特定行,非常感谢您的努力。
  • ok - 每行都有自己的删除按钮吗?还是您选择一行,然后在 gridview 外点击删除按钮?
  • 每一行都有自己的删除按钮
  • 好的 - 更多修订 - 我在等你回复时正在回答 - 给我一秒钟
  • 好的,当然。感谢您的所有帮助。
猜你喜欢
  • 1970-01-01
  • 2018-12-07
  • 2023-03-09
  • 2018-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多