我有一个包含一些顺序项目的复选框,当我单击其中的项目并单击提交按钮时,所有项目都应存储在数据库中。
但是在这里我想确保用户只选择顺序项目,就像用户不能选择 a、b、d、f 他们应该总是选择 a、b、c、d、e、f。
任何人都可以请建议我完成此操作的逻辑。
我有一个包含一些顺序项目的复选框,当我单击其中的项目并单击提交按钮时,所有项目都应存储在数据库中。
但是在这里我想确保用户只选择顺序项目,就像用户不能选择 a、b、d、f 他们应该总是选择 a、b、c、d、e、f。
任何人都可以请建议我完成此操作的逻辑。
我能够使用如下的单循环:
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;
}
}
}
}
首先它将遍历所有项目,一旦循环在第二个项目上并被选中,它将继续检查上一个项目是否被选中,如果前一个项目被选中,它将继续,否则它将打破循环将布尔变量标记为假,然后在循环外我可以轻松检查标志是真还是假,并相应地显示消息。
It might not be the best logic, but it does the job at-least:
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;
}
1st test case:
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
2nd test case:
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: I have not compiled this code, if you get any error please let me know.