0

我有一个包含复选框字段的表单。在页面加载时,我想为我的数据库中的每个客户创建一个单独的复选框。我必须为每个客户创建复选框的代码工作正常。但是,如果客户设置为未经授权,我也想检查数据库,如果他们是,那么我想检查那里的框。我也有代码用于用户选中一个框的情况。如果选中了一个框,我会更新数据库,将未授权属性设置为 true。我的问题是当我选中一个框时它工作正常并且该框被选中,但是如果我重新加载页面,所有框都未选中。因此,要么我的数据库更新没有更新数据库,要么我检查页面加载复选框的方式不正确。有任何想法吗?

asp复选框字段的代码:

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

</asp:CheckBoxList>

页面加载代码:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim sql As String = "SELECT Name, unauthorized, ID FROM Customer ORDER BY Name"
    Dim dt As DataTable = db.execDataTableQuery(sql, "Customer")
            Dim i As Integer
            For i = 0 To dt.Rows.Count - 1
                check1.Items.Add(New ListItem(CStr(dt.Rows(i).Item("Name"))))
                check1.Items(i).Value = CInt(dt.Rows(i).Item("ID"))
                check1.Items(i).Text = CStr(dt.Rows(i).Item("Name"))
                If CInt(dt.Rows(i).Item("unauthorized")) = 1 Then
                    check1.Items(i).Selected = 1
                Else
                    check1.Items(i).Selected = 0
                End If
            Next

        End Sub

更新数据库的代码:

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

End Class
4

1 回答 1

1

您需要将 Page_Load 中的代码包装在 a 中Not Page.IsPostback,否则在回发时不会触发任何事件并且选择会丢失,因为您正在从数据库中覆盖它。

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not IsPostback Then
        ' databind your CheckBoxList '
    End If
End Sub
于 2012-05-14T16:14:21.577 回答