0

我有一个复选框列表,我想为你设置一个上限,你可以检查。这是我所做的。

            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;
                }
            }
4

2 回答 2

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/

于 2012-08-14T09:25:57.670 回答
0

如果我正确阅读此内容,因为您的代码代表您所做的是

  1. 计算整个列表中选中框的数量
  2. 如果先前计数中的数字大于允许的最大值,则将所有内容设置为 false

您需要组合循环 - 这并不完美,因为它不跟踪选择项目的顺序,因此只有前 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;
            }
        }
于 2012-08-14T09:07:33.907 回答