2010-11-21 8 views
1

私はcheckbox_CheckedChangedというルーチンを呼び出すチェックボックス付きのデータグリッドを持っています。ここまでは順調ですね。私はデータビューの別の列の値を計算することができました。これにより、私が扱っている行のIDを確認することができます。vb.net SQLクエリはSQLサーバで動作しますが、チェックボックスから呼び出された場合は動作しません

私は、チェックボックスの初期値を定義する列の値を変更しようとしていますが、vb.netによって呼び出されたときに私が書いたSQLは機能しません。しかし、手動で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エラーのがというゼロのフィードバックを与えています。これはかなり怒っています。

答えて

1

あなたのUPDATE文で、いくつかのスペースを追加する必要があります。私はmessages後とreadit = 0/1後にスペースを追加した

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 

注意してください。そうでなければ、ステートメントはUPDATE messagesSET ...になりますが、これもSSMSでは動作しません。

+0

クラウス - 多くのありがとう、それはSQLを実行するために働いた。トラブルは、私は 'スティック'への変更を取得するためにチェックボックスを2回クリックする必要があります...編集:私はちょうど間違った方法でロジックを持っていた... noob間違い:) – melat0nin

関連する問題