复选框列表仅检查有限的项目

时间:2012-08-14 08:32:35

标签: asp.net checkboxlist

我有一个复选框列表,我希望你有很多可以检查的上限。 这就是我所做的。

            int numSelected = 0;
            foreach (ListItem li in chkMultiBrand.Items)
            {
                if (li.Selected)
                {
                    numSelected = numSelected + 1;
                }
            }
            for (int i = 0; i < chkMultiBrand.Items.Count; i++)
            {
                if (numSelected >= Convert.ToInt32(objLimit.UPPERLIMIT))
                {
                    chkMultiBrand.Items[i].Selected = false;
                }
            }

2 个答案:

答案 0 :(得分:3)

我假设如果超过了最大数量,你想取消选中最后一个检查过的方框,这样就可以了

public void chk_SelectedIndexChanged(object sender, EventArgs e)
{
     int numSelected = 0;
     foreach (ListItem li in chkMultiBrand.Items)
     {
         if (li.Selected)
         {
             numSelected = numSelected + 1;
         }
     }
     if (numSelected >= Convert.ToInt32(objLimit.UPPERLIMIT))
     {
          string[] control = Request.Form.Get("__EVENTTARGET").Split('$');
          int index = control.Length - 1;
          ListItem lastChecked = (ListItem) chkMultiBrand.Items[Int32.Parse(control[index])];
          lastChecked.Selected = false;
     }
 }

虽然如果可能的话我可能会尝试做这个客户端 - 像这样http://jsfiddle.net/CXfgS/2/

答案 1 :(得分:0)

如果我正确地阅读了这段代码,那么你的代码就是

  1. 计算整个列表中已选中复选框的数量
  2. 如果来自先前计数的数字大于允许的最大数量,则将一切设为假
  3. 您需要组合循环 - 这并不完美,因为它不会跟踪选择项目的顺序,因此只会检查前X个复选框的数量,并且将取消选择任何后续项目。

            int numSelected = 0;
            foreach (ListItem li in chkMultiBrand.Items)
            {
                if (numSelected >= Convert.ToInt32(objLimit.UPPERLIMIT))
                {
                    li.Selected = false;
                }
                if (li.Selected)
                {
                    numSelected = numSelected + 1;
                }
            }