【问题标题】:Select All Items in asp.net CheckBoxList选择 asp.net CheckBoxList 中的所有项目
【发布时间】:2011-03-22 20:08:45
【问题描述】:

ASP.NET 和 C#。

我想要一个带有“全选”项的 CheckboxList。

  • 当这个特定项目是 选中,所有其他都将被选中 也。
  • 从选项中取出时 这个项目,它也将来自所有人 其他物品。
  • 选中/取消选中 任何其他项目将只有一个 对该特定项目的影响 无论选择状态如何 “全选”项。

我正在寻找一个 jquery 解决方案。

这是我的代码隐藏中的数据绑定代码:

IList<Central> Centrals = new CentralProvider().GetAllCentralsAsList();
Centrals.Insert(0, new Central(){Central_ID = 999, Central_Name = "Select All"});
CentralChecks.DataSource = Centrals;
CentralChecks.DataTextField = "Central_Name";
CentralChecks.DataValueField = "Central_ID";
CentralChecks.DataBind();

这里是标记:

<div class="CentralDiv" id="CentralDiv">
    <h2>Centrals:</h2>
    <span>
        <asp:TextBox ID="CentralTextBox" runat="server" CssClass="textbox">Centrals</asp:TextBox>
        <img id="CentralArrow" src="images/down_arrow.jpg" style="margin-left: -22px; margin-bottom: -5px" />
    </span>
    <div id="CentralEffect" class="ui-widget-content">
        <asp:CheckBoxList ID="CentralChecks" runat="server" onclick="GetSelectedCentralValue();">
        </asp:CheckBoxList>
    </div>
</div>

请注意,页面上有多个复选框列表,因此任何解决方案都必须牢记这一点。

【问题讨论】:

    标签: c# jquery asp.net checkboxlist selectall


    【解决方案1】:

    您可以将其用于任何复选框列表,只需将 myCheckBoxList 的 cssclass 添加到每个 CheckBoxList 控件即可:

    $('.myCheckBoxList :checkbox').eq(0).click(function() { 
        var toggle = this.checked;
        $('.myCheckBoxList :checkbox').attr("checked", toggle);
    });
    

    【讨论】:

    • 这是完美的 - 优雅且适应性强。 +1 并标记为答案。谢谢。
    • 我同意。实现起来非常简单。只需要在复选框列表渲染后插入脚本即可。
    • @pvaju896 请创建一个新问题,然后您可以参考这个问题
    【解决方案2】:

    您可以在单击全选时遍历所有 ListItem。并维护一个状态标志来维护是否所有的复选框都被选中

    if(boolAllChecked) {
        foreach (ListItem listItem in CentralChecks.Items)
        {
             listItem .Selected = false;
        }
    }
    else {
        foreach (ListItem listItem in CentralChecks.Items)
        {
             listItem .Selected = true;
        }
    }         
    

    【讨论】:

    • 谢谢,虽然这不是 jquery 解决方案
    【解决方案3】:

    这里是一个例子:http://jsfiddle.net/VTgGA/

    代码:

    $('input:checkbox').click(function(){
        var $this = $(this);
    
        if($this.attr('ref') != 'checkall'){
            $(".select-all").attr('checked',false);
        }
        else {
            //Select All
            var $checked = $this.is(':checked');
            $('input:checkbox').each(function(){
                $(this).attr('checked',$checked);
            })
            $(".select-all").attr('checked',$checked);
        }
    })
    

    这是复选框的 html:

    <input type='checkbox' ref='checkall' class='select-all'/>
    <input type='checkbox' />
    <input type='checkbox' />
    <input type='checkbox' />
    <input type='checkbox' />
    <input type='checkbox' />
    <input type='checkbox' />
    

    【讨论】:

    • 我怎样才能只给 CheckBoxList 中的第一个元素一个特定的 ref 或 class 值?
    • 嗯,你只需要为你选择所有项目做一个单独的复选框
    • 我看到你已经回答了很多 PHP 问题。我不确定您对 asp.net 中的 CheckBoxList 控件的体验如何,但据我所知,这是无法做到的。也许你可以提供一个代码示例来帮助我?
    【解决方案4】:

    扩展 mdmullinax 的精彩回答,我想出了这个针对“全选”行为的通用解决方案,如果取消选中任何其他选项,它还会取消选中“全选”(即第一个)选项,并在所有其他选项取消选中时重新选中“全选”项目已打勾。

    当我从 ASP.Net 服务器端控件(在页面的头部注入脚本)注入它时,它也会在窗口加载时执行。安全总比后悔好:)

        $(window).load(function () {
            var cbs = $('.myCheckBoxList :checkbox');
            cbs.eq(0).click(function () {
                var toggle = this.checked;
                cbs.attr('checked', toggle);
            });
            cbs.slice(1).click(function () {
                if (!this.checked) {
                    cbs.eq(0).attr('checked', false);
                } else {
                    cbs.eq(0).attr('checked', cbs.slice(1).filter(':not(:checked)').length == 0);
                }
            });
        });
    

    【讨论】:

      【解决方案5】:

      有一种使用 jquery 在 asp CheckBoxList 中选择所有项目的通用方法。 您可以在具有全选功能的表单上拥有尽可能多的 CheckBoxList 控件。 你只需要确定

      1. 您的 CheckBoxList 有 allowSelectAll
      2. 您在复选框列表中添加了一个 ListItem 以允许用户选择 全部具有 All 的值

      chkBoxList.Items.Insert(0, new ListItem("All", "All"));

      你只需要以下代码

      <script>
          $('.allowSelectAll :checkbox[value=All]').click(function () {
              var toggle = this.checked;
              $(this).closest('.allowSelectAll').find(":checkbox").attr("checked", toggle);
          });
      </script>
      

      在下面的代码spinet中我有4个复选框列表

      <div >
      <label>Experience 1</label>
      <asp:CheckBoxList ID="chklstExp1" runat="server"  CssClass="allowSelectAll">
      </asp:CheckBoxList>
      
      <label>Experience 2</label>
      <asp:CheckBoxList ID="chklstExp2" runat="server" CssClass="allowSelectAll">
      </asp:CheckBoxList>
      
      <label>Experience 3</label>
      <asp:CheckBoxList ID="chklstExp3" runat="server" CssClass="allowSelectAll">
      </asp:CheckBoxList>
      
      <label>Location</label>
      <asp:CheckBoxList ID="chklstLocation" runat="server" CssClass="allowSelectAll">
      </asp:CheckBoxList>
      
      <asp:Button runat="server" ID="btnShowReport" OnClick="btnShowReport_Click" Text="Show Report"/>
      </div>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-05
        • 1970-01-01
        相关资源
        最近更新 更多