仅选择1个复选框或Checkboxlist asp net中的唯一集

时间:2019-01-05 22:44:31

标签: c# asp.net

我需要使用一个复选框列表,因为在特殊情况下,允许用户同时选择3个项目。问题是我什至无法设法使单个选择生效。我这样做是在代码面板后面加上一个updatepanel来不刷新页面。

protected void cblCodeRequest_OnSelectedIndexChanged(object sender, EventArgs e)
{
    int count = 0;
    int i = 0;
    int maxObjects = cblCodeRequest.Items.Count;
    string[] checkObjects = new string[maxObjects];
    ListItem selectedItem = new ListItem();

    foreach (ListItem item in cblCodeRequest.Items)
    {
        checkObjects[i] = item.Text;
        i++;
    }

    foreach (ListItem item in cblCodeRequest.Items)
    {

        if (item.Selected)
        {
           count++;
           selectedItem = item;
           cblCodeRequest.ClearSelection();
        }


        foreach (ListItem itm in cblCodeRequest.Items)
        {
           if (item.Equals(selectedItem))
           {
              item.Selected = true;
           }
        }
    }
}

我不确定如何从此处继续,我已经保存了选定的项目并清除了整个选择,然后再次设置了它,但是它没有这样做,即使我单击了其他按钮,它也会再次选择自身复选框。我认为我的逻辑搞砸了

2 个答案:

答案 0 :(得分:1)

尝试一下,您的foreach语句排列不正确

protected void cblCodeRequest_OnSelectedIndexChanged(object sender, EventArgs e)
{
    ListItem selectedItem = cblCodeRequest.Items[cblCodeRequest.SelectedIndex]


    cblCodeRequest.ClearSelection();

    int x = 0;
    for(x; x<cblCodeRequest.Items.Count; x++)
    {
         if (cblCodeRequest.Items[x].Equals(selectedItem))
         {
             item.Selected = true;
         }
    }
}

答案 1 :(得分:0)

好的,我终于解决了这个问题。我必须深入研究调试器的问题并遵循逻辑。我在jQuery中完成了此操作,因此可以删除更新面板。如果有人遇到与我相同的问题,这就是您的解决方案。

这允许您使用单选按钮列表之类的复选框列表,但还可以检查属于特殊选择组的多个复选框。

$(function () {

$('[id*=cblCodeRequest] input').on('click', function () {

    var checkboxlist = $('[id*=cblCodeRequest]'); // CheckBoxList 

    var checkboxArray = $('[id*=cblCodeRequest] input'); // CheckBoxList Items

    var current = $(this); // Get Selected Checkbox 

    var label = $(current).next().text(); // Get CheckBox label name

    // Uncheck every checkBox that don't match the unique multi selection combo

    if (label != "Recâmbio" && label != "Série" && label != "Embalagem Alternativa") {

        // Loop through checkboxArray and uncheck every item that does not meet the condition
        $(checkboxArray).each(function (i) {
            $(this).prop("checked", false);
        });

        // Check the selected item again
        $(current).prop("checked", true);
    } else {

        // Get the current checkbox name 
        var chk = $(current).next().text();

        // If the checkbox that matches the unique combo selection was click uncheck all invalid checkboxes that don't match
        if (chk == "Série" || chk == "Recâmbio" || chk == "Embalagem Alternativa") {

            // loop through the checkboxlist again
            $(checkboxArray).each(function () {
                // Get the looped item name
                var ck = $(this).next().text();
                // if checkbox does not belong to the unique combo selection, uncheck it
                if (ck != "Recâmbio" && ck != "Série" && ck != "Embalagem Alternativa") {
                    $(this).prop("checked", false);
                }
            });
        }
    }
});
});