再次。
在 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 删除?
提前致谢。