VB.Net检查是否选中/取消选中复选框列表项

时间:2012-05-14 17:22:03

标签: asp.net vb.net checkboxlist

我有一个复选框列表,在页面加载时填充了我的数据库中的条目。我需要在检查项目时以及取消选中项目时更新数据库中的条目。现在我正在做以下事情:

<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

但是当我取消选中一个按钮时,其他情况从未运行过。此外,如果我选中了4个按钮并取消选中所有四个按钮,当我取消选中第四个按钮时,我会在该行显示错误:

If check1.SelectedItem.Selected = True Then

错误是:“对象引用未设置为对象的实例。”

有没有更好的方法来检查列表项是已选中还是未选中?

由于

2 个答案:

答案 0 :(得分: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)

如果您只想包含实际检查的项目。

答案 1 :(得分: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