0

コードは最初にチェックした名前を 1 つだけチェック ボックスに追加し、他の名前は追加しませんが、ボタンをクリックするたびにチェックボックス リストを追加し続けます。なぜこれが起こっているのか分かりません。助けてください

Partial Class ShermanZone
    Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not IsPostBack Then
            CheckBox()
        End If
    End Sub
    Protected Sub CheckBox() Handles CheckBoxList1.SelectedIndexChanged
        CheckBoxList1.Items.Add(New ListItem("Jeff"))
        CheckBoxList1.Items.Add(New ListItem("Kristin"))
        CheckBoxList1.Items.Add(New ListItem("Scott"))
        CheckBoxList1.Items.Add(New ListItem("Karri"))
        CheckBoxList1.Items.Add(New ListItem("Amy"))
    End Sub
    Protected Sub btnClick_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnClick.Click
        Dim strTextBox As String = String.Empty

        For Each picked As ListItem In CheckBoxList1.Items
            If picked.Selected Then
                If String.IsNullOrWhiteSpace(strTextBox) Then
                    strTextBox = picked.Value
                Else
                    strTextBox += ("," & picked.Value)
                End If
            End If
            Exit For
        Next picked

        txtOutput.Text = strTextBox
    End Sub

End Class
4

1 に答える 1

2

SelectedIndexChangedイベント ハンドラを削除します。

代わりに:

Protected Sub CheckBox() Handles CheckBoxList1.SelectedIndexChanged
    CheckBoxList1.Items.Add(New ListItem("Jeff"))
    ' ..... '
    CheckBoxList1.Items.Add(New ListItem("Amy"))
End Sub

これ:

Protected Sub CheckBox()
    CheckBoxList1.Items.Add(New ListItem("Jeff"))
    ' ..... '
    CheckBoxList1.Items.Add(New ListItem("Amy"))
End Sub

それ以外の場合は、ポストバックでもトリガーされ、すべてのアイテムがリストに再度追加されます。

それとは別に、選択した項目の値を追加するボタンクリック ハンドラーを簡素化できます。

Protected Sub btnClick_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles BtnClick.Click
    Dim picked = From item In CheckBoxList1.Items.Cast(Of ListItem)()
               Where item.Selected
               Select item.Value

    txtOutput.Text = String.Join(",", picked)
End Sub
于 2012-07-20T19:20:26.580 に答える