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でラップする必要があります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 に答える