选择CheckBoxList中的所有CheckBoxes

时间:2012-03-06 03:04:36

标签: c# asp.net checkbox checkboxlist

我的网页上有CheckBoxCheckBox列表 如果选择CheckBox,则应选择CheckBoxes中的所有CheckBoxList,如果取消选中CheckBox,则同样CheckBoxes中的所有CheckBox {1}}应取消选中(取消选中)。

.aspx代码

<asp:CheckBoxList ID="CheckBoxList1" runat="server" 
            RepeatDirection="Horizontal" RepeatLayout="Flow">
            <asp:ListItem>Item A</asp:ListItem>
            <asp:ListItem>Item B</asp:ListItem>
            <asp:ListItem>Item C</asp:ListItem>
            <asp:ListItem Selected="True">Item D</asp:ListItem>
            <asp:ListItem>Item E</asp:ListItem>
            <asp:ListItem>Item F</asp:ListItem>
            <asp:ListItem>Item G</asp:ListItem>
        </asp:CheckBoxList>
<asp:CheckBox ID="allChkBox" Text="Select all" runat="server" 
                oncheckedchanged="allChkBox_CheckedChanged" />

我试着像这样做,但它没有用:

bool prevSelection = false;
protected void allChkBox_CheckedChanged(object sender, EventArgs e)
    {
if (!prevSelection)
        {
            foreach (ListItem chkitem in CheckBoxList1.Items)
            {
                chkitem.Selected = true;
            }
        }
        else
        {
            foreach (ListItem chkitem in CheckBoxList1.Items)
            {
                chkitem.Selected = false;
            }
        }
        prevSelection = !prevSelection;
}

6 个答案:

答案 0 :(得分:4)

我更喜欢使用客户端脚本来做这样的事情,所以你的页面不必做回发

如果有可能尝试在点击时触发javascript函数进行循环并选择......类似

<script type="text/javascript">
checked=false;
function checkedAll (frm1) {
    var aa= document.getElementById('frm1');
     if (checked == false)
          {
           checked = true
          }
        else
          {
          checked = false
          }
    for (var i =0; i < aa.elements.length; i++) 
    {
           if(aa.elements[i].type == 'checkbox') { 
             aa.elements[i].checked = checked;
           }
    }
 }
</script>

答案 1 :(得分:1)

自从我涉足ASP.NET之后已经有一段时间了,但您的prevSelection字段将在每个请求中初始化为false。请求之间不会保留该值。因此,您需要将它存储在View State或缓存中并从事件处理程序中加载它,或者更好的是,将您的方法更改为以下内容:

protected void allChkBox_CheckedChanged(object sender, EventArgs e)
{
    foreach (ListItem chkitem in CheckBoxList1.Items)
    {
        chkitem.Selected = allChkBox.Selected;
    }
}

答案 2 :(得分:0)

不使用函数外部的变量,而是使用复选框本身如何:

protected void allChkBox_CheckedChanged(object sender, EventArgs e)
{
    CheckBox chkbox = sender;

    foreach (ListItem chkitem in CheckBoxList1.Items)
    {
        chkitem.Selected = chkbox.Selected;
    }
}

答案 3 :(得分:0)

你可以像这样用linq做到这一点

var allChecked = (from ListItem item in CheckBoxList1.Items 
                              where item.Selected 
                              select int.Parse(item.Value)).ToList();


  var all = (from ListItem item in CheckBoxList1.Items 

                                  select int.Parse(item.Value)).ToList();

答案 4 :(得分:0)

function CheckUnCheckAll()
    {
        var list = document.getElementById("<%=DataList1.ClientID%>") ;
        var chklist = list.getElementsByTagName("input");
        for (var i=0;i<chklist.length;i++)
        {
            if (chklist[i].type=="checkbox" )
            {
                chklist[i].checked = checkoruncheck;
            }
        } 
    }

答案 5 :(得分:0)

如果我理解了这个要求,那怎么样?)?这将使CheckBoxList控件中的所有项selected在呈现时默认为:

protected void Page_Load(object sender, EventArgs e)
{
  if (Page.IsPostBack) return;
  LoadCountryList();
}


private void LoadCountryList()
{
  _ctx = new PayLinxDataContext();

  chkCountries.DataSource = _ctx.Countries.OrderBy(c => c.Name);
  chkCountries.DataBind();

  foreach (ListItem item in chkCountries.Items)
  {
    item.Selected = true;
  }
}