【问题标题】:Which checkbox in the CheckBoxList was just Checked (or Un-Checked)?CheckBoxList 中的哪个复选框刚刚被选中(或未选中)?
【发布时间】:2013-12-07 17:56:31
【问题描述】:

我在 aspx 文件中有这个复选框列表:

        <asp:CheckBoxList ID="CBL_LOC" runat="server" RepeatDirection="Horizontal" 
            AutoPostBack="True" Font-Size="Small" Font-Names="Calibri">
        </asp:CheckBoxList>

项目根据用户之前的输入添加到代码隐藏中,如下所示:

    L = New ListItem
    L.Text = "ALL"
    L.Value = "ALL"
    L.Selected = True
    CBL_LOC.Items.Add(L)

    conn.ConnectionString = strConnString
    conn.Open()
    cmd = New SqlCommand(Sql, conn)
    dr = cmd.ExecuteReader
    While dr.Read
        L = New ListItem
        L.Text = dr(0)
        L.Value = dr(0)
        CBL_LOC.Items.Add(L)
        L.Selected = True
    End While
    dr.Close()
    cmd.Dispose()
    conn.Close()

现在,当用户选中(或取消选中)“全部”复选框时,我正在尝试使用以下代码选中/取消选中所有项目:

    Dim CBL As CheckBoxList = sender

    If (CBL.SelectedValue = "ALL") Then
        For Each I As ListItem In CBL_LOC.Items
            I.Selected = CBL.Items(0).Selected
        Next
    End If

当 ALL 复选框从未选中变为选中时,这工作正常,SelectedValue 为“ALL”。但是当未选中“ALL”并且用户选中“ALL”时,SelectedValue 显示为第一个“选中”复选框的值,而不是“ALL”框。

我在这里遗漏了什么吗?是否有不同/更好的方法来确定复选框列表中的哪个复选框被选中或未选中?

【问题讨论】:

    标签: asp.net vb.net


    【解决方案1】:

    我建议通过创建两个链接按钮,使全选和全选功能由复选框列表本身之外的控件管理,因为这将删除 SelectedValue 检查逻辑;像这样:

    <asp:LinkButton ID="LinkButtonAll" runat="server" OnClick="LinkButtonAll_Click">
        Select All
    </asp:LinkButton>
    <asp:LinkButton ID="LinkButtonNone" runat="server" 
                    OnClick="LinkButtonNone_Click">
        Select None
    </asp:LinkButton>
    

    现在在代码隐藏中,让两个链接按钮执行它们的逻辑,如下所示:

    ' Check all item
    Protected Sub LinkButtonAll_Click(sender As Object, e As EventArgs)
        For Each item As ListItem In CBL_LOC.Items
            item.Selected = True
        Next
    End Sub
    
    ' Uncheck all items
    Protected Sub LinkButtonNone_Click(sender As Object, e As EventArgs)
        For Each item As ListItem In CBL_LOC.Items
            item.Selected = False
        Next
    End Sub
    

    注意:如果您的页面中没有AutoEventWireup="true",则需要将Handles 语法附加到两个子过程的末尾。

    【讨论】:

    • 您可以(如果您愿意的话)只需设置 item.Selected 与它在一种方法中设置的相反,这样您就可以通过一个按钮检查/取消选中所有内容(哪些用户更多习惯了)。
    • @Tim - 很公平,只是想展示 OP 的替代方案。
    • @Tim -- 是的 -- 但是,我也试图允许用户在未选中“ALL”时选择单个项目,但如果选中“ALL”则无法取消选中任何项目.我可能只是将“控制”ALL 放在复选框列表之外。好主意,卡尔,谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多