2010-11-21 3 views
1

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.

Répondre

1

Vous devez ajouter des espaces dans votre déclaration de mise à jour:

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 

Notez que j'ai ajouté des espaces après messages et après readit = 0/1. Sinon, votre instruction serait UPDATE messagesSET ..., ce qui ne fonctionne pas non plus dans SSMS.

+0

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

Questions connexes