この問題には良い解決策があります:
C# では、次のコードを使用して 5 つの項目を持つ CheckBoxList を生成します。
CheckBoxList chkl = new CheckBoxList();
string[] items = { "item1", "item2", "item3", "item4", "item5" };
foreach (string item in items)
{
chkl.Items.Add(new ListItem(item));
}
chkl.AutoPostBack = true;
chkl.CssClass = "3";
chkl.SelectedIndexChanged += new EventHandler(BoxChecked);
ご覧のとおり、CheckBoxList には 5 つの項目があり、最大チェック項目は CheckBoxList の CssClass 属性を介して設定されます。より明確にするために、この属性を介して最大チェック項目を設定します。ここで重要なのは、CheckboxList に EventHandler を追加することです。これにより、ユーザーが最大項目を超えてチェックしようとすると、他の項目が無効になります。
EventHandler は次のように記述されます。
protected void BoxChecked(object sender, EventArgs e)
{
try
{
int maximumCheck = -1;
CheckBoxList CheckExpertiseList = (CheckBoxList)sender;
try {
maximumCheck = Convert.ToInt32(CheckExpertiseList.CssClass);
}
catch { }
if (maximumCheck > -1)
{
if (CheckExpertiseList.Items.Cast<ListItem>().Where(i => (i.Selected == true)).Count() == maximumCheck)
{
CheckExpertiseList.Items.Cast<ListItem>().Where(i => (i.Selected == false)).ToList().ConvertAll(i => i.Enabled = false).ToList();
}
else if (CheckExpertiseList.Items.Cast<ListItem>().Where(i => (i.Selected == true)).Count() == maximumCheck - 1)
CheckExpertiseList.Items.Cast<ListItem>().Where(i => (i.Selected == false)).ToList().ConvertAll(i => i.Enabled = true).ToList();
}
}
catch { }
}
EventHandler イベントは、チェックボックス リストで制限を超えたアイテムがチェックされているかどうかをチェックし、他のアイテムを無効にします。そうでない場合は、他のアイテムを再び有効にします。