确保在checklistbox中选择顺序项

时间:2016-01-01 20:23:30

标签: c# asp.net checklistbox

我有一个checklistbox,它有一些顺序的项目,当我点击它的项目并点击提交按钮时,所有项目应该存储在数据库中。

但在这里我想确保用户只选择顺序项,就像用户无法选择a,b,d,f他们应该总是选择a,b,c,d,e,f。

任何人都可以建议我完成这个的逻辑。

2 个答案:

答案 0 :(得分:1)

我能够使用如下单循环:

for (int i = 0; i < chkBox.Items.Count; i++)
        {
            if (i > 0)
            {
                if (chkBox.Items[i].Selected)
                {
                    if (chkBox.Items[i - 1].Selected)
                        continue;
                    else
                    {
                        _isSequentialSelected = false;
                        break;
                    }
                }
            }
        }

首先它将循环遍历所有项目,一旦循环在第二个项目上并且被选中,它将继续并检查是否选择了上一个项目,如果选择了上一个项目,它将继续,否则它将是打破循环标记bool变量false然后外部循环我可以轻松检查标志是真还是假,并相应地显示消息。

答案 1 :(得分:0)

它可能不是最好的逻辑,但至少可以完成这项工作:

List<int> selectedvalues = new List<int>();
bool isSequence = true;

//get all selected indices
for(int i = 0; i < checkboxlist.Items.Count; i++)
    if(checkboxlist.Items[i].Selected)
        selectedvalues.Add(i);

//start from first selected index, go to last selected index
for(int i = selectedvalues[0]; i < selectedvalues[selectedvalues.Length - 1]; i++)
    if(i != selectedvalues[i])
    {
        isSequence = false;
        break;
    }

第一个测试用例:

User selected indices: 3, 4, 7, 8
Now second loop:
    i = 3, index = 3
    i = 4, index = 4
    i = 5, index = 7    //false and break

第二个测试用例:

User selected indices: 3, 4, 5, 6
Now second loop:
    i = 3, index = 3
    i = 4, index = 4
    i = 5, index = 5
    i = 6, index = 6    //success

PS:我没有编译此代码,如果您收到任何错误,请告诉我。