1

ページの読み込み時にデータベースからのエントリで満たされたチェックボックスリストがあります。アイテムがチェックされているときとチェックされていないときに、データベースのエントリを更新する必要があります。現在、私は次のことを行っています。

<asp:CheckBoxList id="check1" AutoPostBack="True" TextAlign="Right" OnSelectedIndexChanged="Check" runat="server">

</asp:CheckBoxList>

そして機能:

Sub Check(ByVal sender As Object, ByVal e As EventArgs)
    Dim sql As String
    If check1.SelectedItem.Selected = True Then
        sql = "UPDATE Customer SET unauthorized = 'True' WHERE ID = @ID"
        db.execUpdateQuery(sql, New SqlClient.SqlParameter("@ID", check1.SelectedItem.Value))
    Else
        sql = "UPDATE Customer SET unauthorized = 'False' WHERE ID = @ID"
        db.execUpdateQuery(sql, New SqlClient.SqlParameter("@ID", check1.SelectedItem.Value))
    End If
End Sub

しかし、ボタンのチェックを外すと、elseケースは実行されません。また、4つのボタンをオンにしていて、4つのボタンすべてのチェックを外すと、4番目のボタンのチェックを外すと、次の行でエラーが発生します。

If check1.SelectedItem.Selected = True Then

エラーは次のとおりです。「オブジェクト参照がオブジェクトのインスタンスに設定されていません。」

リストアイテムがチェックされているかチェックされていないかを確認するためのより良い方法はありますか?

ありがとう

4

2 に答える 2

1
for (int i = 0; i < check1.Items.Count; i++)
  if (check1.GetItemChecked(i))
    // Do selected stuff
  else
    // Do unselected stuff

チェックが不確定な状態にある場合でも、これはtrueを返します。あなたは交換したいかもしれません

if (check1.GetItemChecked(i))

if (check1.GetItemCheckState(i) == CheckState.Checked)

実際にチェックした項目のみを含めたい場合。

于 2012-05-14T17:30:29.103 に答える
1

これも試すことができます

   For i As Integer = 0 To CheckedListBox1.Items.Count - 1
        If CheckedListBox1.GetItemChecked(i) = True Then
            sql = "UPDATE Customer SET unauthorized = 'True' WHERE ID = @ID"
            db.execUpdateQuery(sql, New SqlClient.SqlParameter("@ID", check1.SelectedItem.Value))
        Else
            sql = "UPDATE Customer SET unauthorized = 'False' WHERE ID = @ID"
            db.execUpdateQuery(sql, New SqlClient.SqlParameter("@ID", check1.SelectedItem.Value))  
        End If
    Next
于 2014-10-29T11:49:22.883 に答える