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

Although I would possibly try to do this client side if possible - something like this http://jsfiddle.net/CXfgS/2/

于 2012-08-14T09:25:57.670 に答える
0

あなたのコードがあなたのしていることを立っているので、私がこれを正しく読んでいるなら

  1. リスト全体でチェックされたボックスの数を数える
  2. prvious countからの数が許可された最大数よりも大きい場合は、すべてを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 に答える