2016-01-01 2 views
-1

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

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

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

+1

Что вы хотите, если пользователь попытается выбрать a, b, d, f? Должно быть разрешено, но получить сообщение об ошибке? Если вы заблокируете выбор d? Если вы автоматически выбираете c, когда он выбирает d и автоматически выбирает e, когда он выбирает f? Вам нужно объяснить, что вы хотите. –

ответ

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

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, а затем внешним циклом я могу легко проверить, является ли флаг истинным или ложным, и соответственно отображать сообщение.

+0

Что делать, если последний элемент '-1'? А что, если выбрано только одно значение? – Shaharyar

+0

Как вы можете видеть, я использовал if (i> 0) перед последовательной проверкой, поэтому, если выбран только один элемент, он будет успешным, на нем не требуется проверка. – Abbas

+0

Он сохранит вас в случае, если выбран первый элемент, я спрашивал, выбирает ли пользователь, скажет, что это '4', тогда ваш код будет проверять, выбрано ли' 3' или нет, и приведет к 'false'. – Shaharyar