J'ai une grille de données avec des cases à cocher qui appelle une routine appelée checkbox_CheckedChanged. Jusqu'ici tout va bien. J'ai réussi à l'obtenir pour calculer la valeur d'une autre colonne dans la vue de données, ce qui me permet de déterminer l'identifiant de la rangée à laquelle je fais face. J'essaye de l'obtenir pour changer la valeur de la colonne qui définit la valeur initiale des cases à cocher, mais le SQL que j'ai écrit ne fonctionne pas quand appelé par vb.net - il fonctionne quand il est entré manuellement dans le serveur SQL, cependant.vb.net La requête SQL fonctionne dans le serveur SQL mais pas quand elle est appelée depuis la case à cocher
Voici mon code derrière:
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
L'idée est que lorsque vous cliquez dessus, la case à cocher retourner la valeur « readit » dans la base de données à son contraire. Il continue à sauter à l'exception SqlException, donc je vois le message d'erreur.
Le code ASPX pour les cases à cocher est la suivante:
<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>
Toute aide serait grandement appréciée. Visual Studio (2008) donne zéro commentaires sur les erreurs SQL dans cette situation, ce qui est assez exaspérant.
Klaus - merci beaucoup, cela a fonctionné pour faire fonctionner le SQL. Le problème est, je dois cliquer sur les cases à cocher deux fois pour obtenir le changement à «coller» ... EDIT: j'ai juste eu la logique à l'envers ... noob erreur :) – melat0nin