У меня есть сетка данных с флажками, которая вызывает процедуру с именем checkbox_CheckedChanged. Все идет нормально. Мне удалось заставить его работать со значением другого столбца в представлении данных, что позволяет мне определить идентификатор строки, с которой я имею дело.
Я пытаюсь заставить его изменить значение столбца, который определяет начальное значение флажков, но написанный мной SQL не работает при вызове vb.net - он работает при вводе вручную в сервер SQL, однако.
Вот мой код:
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) дает ноль отзывов об ошибках SQL в этой ситуации, что довольно раздражает.