Выбрать все флажки в CheckBoxList - PullRequest
0 голосов
/ 06 марта 2012

У меня есть список CheckBox и CheckBox на моей веб-странице.Если выбран CheckBox, все CheckBoxes в CheckBoxList должны быть выбраны, а если CheckBox не отмечен, аналогично все CheckBoxes в CheckBox должны быть сняты (не отмечены).

.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 ]

4 голосов
/ 06 марта 2012

Я предпочитаю использовать клиентский скрипт для чего-то подобного, поэтому вашей странице не нужно выполнять обратную передачу

Если есть возможность, попробуйте запустить функцию 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 голос
/ 06 марта 2012

Прошло много времени с тех пор, как я баловался с ASP.NET, но ваше поле prevSelection будет инициализироваться равным false при каждом запросе.Это значение не будет сохраняться между запросами.Итак, вам нужно либо сохранить его в View State или в кеше и загрузить его оттуда в обработчик событий, либо, что еще лучше, изменить свой метод на что-то вроде этого:

protected void allChkBox_CheckedChanged(object sender, EventArgs e)
{
    foreach (ListItem chkitem in CheckBoxList1.Items)
    {
        chkitem.Selected = allChkBox.Selected;
    }
}
0 голосов
/ 23 июля 2015

Как насчет этого, если я правильно понял требование!)?Это сделает все элементы selected в элементе управления CheckBoxList по умолчанию при визуализации:

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;
  }
}
0 голосов
/ 06 марта 2012
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;
            }
        } 
    }
0 голосов
/ 06 марта 2012

вы можете сделать это с помощью 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();
0 голосов
/ 06 марта 2012

Вместо использования переменной вне функции, как насчет использования самого флажка:

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

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