0

C#を使用して複数のアイテムを含むCheckBoxListを生成しました。ここで、CheckBoxListで許可されるチェック項目の最大数を設定したいと思います。ユーザーが許可されたアイテムの最大数を超えてチェックした場合、アラートが表示されるか、他のアイテムが自動的にチェックを外して、ユーザーが許可されたアイテムの最大数を超えないようにします。

チェックされた項目の最大数は、コードビハインド(C#)でChecokBoxListに設定されるか、javascriptを使用してこれを行いますが、javascriptもC#で生成する必要があります。

この問題を解決するには、助けが必要です。

サンプルコード:

CheckBoxList chkl = new CheckBoxList();
string[] items = {"item1", "item2", "item3", "item4", "item5"};
foreach (string item in items )
            {
                chkl.Items.Add(new ListItem(item));
            }
chkl.MaximumCheck = 3;

コードビハインドで生成された後、CheckBoxListはユーザーが3つの項目のみをチェックできるようにします。ユーザーが3つ以上の項目をチェックした場合、他の項目は自動的にチェックを外すか、少なくともアラートが表示され、ユーザーが3つ以上の項目をチェックするのを防ぎます。

4

4 に答える 4

1
int x = 0;
foreach (var li in ListBox1.Items) {
 if (li.Selected == true)
 {
  x = x + 1;
 }

または好き:

ListBox1.GetSelectedIndices().Length

Javascript の場合:

<script type="text/javascript" language="javascript">
function CheckCheck()
{
    var chkBoxList=document.getElementById('<%=CheckBoxList1.ClientID %>');        var chkBoxCount=chkBoxList.getElementsByTagName("input");

     var btn=document.getElementById('<%=btnSubmit.ClientID %>');
     var i=0;
     var tot=0;
     for(i=0;i<chkBoxCount.length;i++)
     {
      if(chkBoxCount[i].checked)
      {
       tot=tot+1;
      }
     }

if(tot > 3)
{
   alert('Cannot check more than 3 check boxes');              
}    
</script>
<form id="form1" runat="server">
<div>
<table>
<tr>
<td>
<asp:CheckBoxList ID="CheckBoxList1" runat="server" onclick="javascript:CheckCheck();">
<asp:ListItem>One</asp:ListItem>
<asp:ListItem>Two</asp:ListItem>
<asp:ListItem>Three</asp:ListItem>
<asp:ListItem>Four</asp:ListItem>
<asp:ListItem>Five</asp:ListItem>
</asp:CheckBoxList>
</td>
<td>
<asp:Button ID="btnSubmit" runat="server" Text="Submit" />
</td>
</tr>
</table>

于 2013-03-03T03:36:28.983 に答える
1

この問題には良い解決策があります:

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 イベントは、チェックボックス リストで制限を超えたアイテムがチェックされているかどうかをチェックし、他のアイテムを無効にします。そうでない場合は、他のアイテムを再び有効にします。

于 2013-03-03T03:41:14.267 に答える
0

まず、ジェレミー・トンプソンに感謝します。彼は私の問題について良いアイデアをくれました。少し変化して、私は欲しいものを手に入れました。JavaScript のみを使用して問題を解決してください。

<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<script type="text/javascript" language="javascript">
    function CheckCheck() {
        var chkBoxCount = this.getElementsByTagName("input");
        var max = parseInt(this.className);
        var i = 0;
        var tot = 0;
        for (i = 0; i < chkBoxCount.length; i++) {
            if (chkBoxCount[i].checked) {
                tot = tot + 1;
            }
        }

        if (tot > max) {
            var k = 0;
            for (i = 0; i < chkBoxCount.length; i++) {
                if (chkBoxCount[i].checked) {
                    k++;
                    if (k > max) {
                        chkBoxCount[i].checked = false;
                        alert('Cannot check more than ' + max + ' check boxes');
                    }
                }
            }               
        }
    }
</script>
<div>
<table>
<tr>
<td>
<asp:CheckBoxList ID="CheckBoxList1" runat="server" CssClass="3" onclick="javascript:CheckCheck.call(this);">
<asp:ListItem>One</asp:ListItem>
<asp:ListItem>Two</asp:ListItem>
<asp:ListItem>Three</asp:ListItem>
<asp:ListItem>Four</asp:ListItem>
<asp:ListItem>Five</asp:ListItem>
</asp:CheckBoxList>
</td>
<td>
<asp:Button ID="btnSubmit" runat="server" Text="Submit" />
</td>
</tr>
</table>
</div>
</form>
</body>
</html>

javascript は、どのコントロールがそれを呼び出すかを自動的に認識し、コントロールの属性 CssClass を介して最大のチェック項目も取得します。これを行うことで、ポストバックを行わなくても、CheckBoxList の最大項目数を超えるユーザー チェックを防ぐこともできます。

于 2013-03-03T04:59:16.387 に答える
0
private void cb_magia_SelectedIndexChanged(object sender, EventArgs e)
    {
        int maxNumber = 4;
        int iSelectedIndex = cb_magia.SelectedIndex;
        if (cb_magia.CheckedItems.Count > maxNumber)
        {
           cb_magia.SetItemCheckState(iSelectedIndex, CheckState.Unchecked);
           MessageBox.Show("you had checked the maximum checkbox value allowed");

        }
    }
于 2016-11-02T01:05:08.383 に答える