У меня есть контрольный список, в котором есть несколько последовательных элементов, когда я нажимаю на элементы из него и нажимаю кнопку отправки, все элементы должны сохраняться в базе данных.

Но здесь я хочу, чтобы пользователь выбирал только последовательные элементы, например, пользователь не может выбрать a, b, d, f, он всегда должен выбирать a, b, c, d, e, f.

Кто-нибудь может предложить мне логику для этого.

Abbas

Ответов: 2

Ответы (2)

Это может быть не лучшая логика, но она, по крайней мере, выполняет свою работу:

List selectedvalues = new List();
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;
    }

1-й тестовый пример:

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

2-й тестовый пример:

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: Я не скомпилировал этот код, если вы получите какую-либо ошибку, дайте мне знать.

Мне удалось обойтись одним циклом, как показано ниже:

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;
                    }
                }
            }
        }

Сначала он будет перебирать все элементы, как только цикл будет на втором элементе и его выбран, он продолжит и проверяет, был ли выбран предыдущий элемент, если предыдущий элемент был выбран, он продолжится, иначе он будет разорвать цикл, помечая логическую переменную как ложь, а затем вне цикла я могу легко проверить, является ли флаг истинным или ложным, и, соответственно, показать сообщение.

2022 WebDevInsider