0

ページにCheckBoxListがありますが、動作がよくありません。

フォームの送信ボタンをクリックすると、アプリは特定のユーザーに関連するすべての行のデータベーステーブルをクリアし、ユーザーのCheckBoxListの選択に基づいて新しい行を再挿入する必要があります。

問題は、CheckBoxList内の項目のいずれか(またはすべて)が選択されているかどうかに関係なく、アプリが取得し続けることSelected = Falseです。

これが私のコードです:

Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load

    loadRegions()
End Sub

Private Sub loadRegions()

    Dim db As New Database

    Dim sql As String = "select * from regions"

    Dim dr As MySqlDataReader = db.execDB(sql, "Text", Nothing, "DataReader", False)

    If dr.HasRows Then

        cblRegion.DataSource = dr
        cblRegion.DataTextField = "regionname"
        cblRegion.DataValueField = "regionid"
        cblRegion.DataBind()
    End If

    dr.Close()
End Sub

Protected Sub btnRegister_Click(sender As Object, e As System.EventArgs) Handles btnRegister.Click
        ' ============================================================
        ' There's more code in here, but it's irrelevant to this paste
        ' ============================================================

        Dim sql As String = "delete from userregions where userid = " & lblUserID.Text & ";"

        For i As Integer = 0 To cblRegion.Items.Count - 1
            If cblRegion.Items(i).Selected Then
                sql &= "insert into userregions (userid, regionid)" & _
                    "values(" & UserID & ", " & cblRegion.Items(i).Value & ")"

                db.execDB(sql, "Text", Nothing, "None", False)
            End If
        Next
End Sub

記録のために、
私はここでSQLインジェクションの可能性を認識しています。ループが機能するようになったらすぐに、パラメータの使用に移ります。

御時間ありがとうございます。どんな助けでも大歓迎です。

4

3 に答える 3

1

Page_Load メソッドに「If IsPostBack Then Return」という行を追加します。

Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    If IsPostBack Then Return
    loadRegions()
End Sub
于 2012-06-13T11:58:02.600 に答える
1

loadRegionsポストバックではなく、初期ロードでのみ呼び出す必要があります。

Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    If Not Page.IsPostBack Then
        loadRegions()
    End If
End Sub

そうしないと、変更された値が失われ、イベントがトリガーされません。

于 2012-06-13T11:53:39.103 に答える
1

読み込まれたページに、次のように記述します。

If Not IsPostBack
    loadRegions()
End If
于 2012-06-13T11:54:03.113 に答える