我有一个带有复选框的数据网格,它调用一个名为 checkbox_CheckedChanged 的例程。到目前为止,一切都很好。我已经设法让它计算出数据视图中另一列的值,这使我能够确定正在处理的行的 id。
我试图让它更改定义复选框初始值的列的值,但是我编写的 SQL 在由 vb.net 调用时不起作用 - 当手动输入 SQL Server 时它确实起作用, 然而。
这是我后面的代码:
Public Sub checkbox_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs) 'Handles checkbox.CheckedChanged
Dim connectionString As String = WebConfigurationManager.ConnectionStrings("edinsec").ConnectionString
Dim box As CheckBox = DirectCast(sender, CheckBox)
Dim tblcell As TableCell = CType(box.Parent, TableCell)
Dim dgRow As GridViewRow = CType(tblcell.Parent, GridViewRow)
Dim msgId As Integer = unreadMessages.Rows(dgRow.DataItemIndex).Cells(0).Text
Dim insertSQL As String
If box.Checked = True Then
insertSQL = "UPDATE messages"
insertSQL &= "SET readit = 0"
insertSQL &= "WHERE msgid = @msgId"
Else
insertSQL = "UPDATE messages"
insertSQL &= "SET readit = 1"
insertSQL &= "WHERE msgid = @msgId"
End If
Using con As New SqlConnection(connectionString)
Dim cmd As New SqlCommand(insertSQL, con)
cmd.Parameters.AddWithValue("@msgId", msgId)
Try
con.Open()
cmd.ExecuteNonQuery()
Catch Err As SqlException
MsgBox("Error", 65584, "Insertion Error")
End Try
con.Close()
End Using
End Sub
这个想法是,当单击时,复选框会将数据库中的“readit”值翻转为其相反值。然而,它不断跳转到 SqlException,所以我看到了错误消息。
复选框的 aspx 代码是这样的:
<asp:TemplateField HeaderText="readit" SortExpression="readit">
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="true" OnCheckedChanged="checkbox_CheckedChanged" Checked='<%# Bind("readit") %>'
Enabled="true" />
</ItemTemplate>
<EditItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="true" OnCheckedChanged="checkbox_CheckedChanged" Checked='<%# Bind("readit") %>' />
</EditItemTemplate>
</asp:TemplateField>
任何帮助将非常感激。 Visual Studio (2008) 给出zero在这种情况下对 SQL 错误的反馈,这非常令人恼火。