2011-01-11 4 views
1

У меня есть DataBound «CheckedListBox», мне нужно проверить некоторые элементы на нем. Я попытался с помощью следующего кода ...Программная проверка DataBound CheckListBox

if (!string.IsNullOrEmpty(search.Languages)) 
     { 
      string[] langs = search.Languages.Split(','); 
      for (int i = 0; i < (langs.Length - 1); i++) 
      { 
       for (int j = 0; j < clbLang.Items.Count; j++) 
       { 
        string lng = clbLang.Items[j] as string; 
        if (lng.Trim() == langs[i]) 
        { 
         clbLang.SetItemChecked(j, true); 
         break; 
        } 
       } 
      } 
     } 

Нет ошибок, debuged исполнение происходит через «проверки» процесс, но в конце концов я не могу увидеть что-нибудь проверить на нем.

Затем я добавил кнопку и добавил к ней следующий код. (на мыши проверить все элементы)

private void button9_Click(object sender, EventArgs e) 
    { 
     for (int i = 0; i < clbLang.Items.Count; i++) 
     { 
      clbLang.SetItemChecked(i, true); 
     } 
    } 

Это «проверка» все детали, пожалуйста, скажите мне, если кто-нибудь может увидеть проблему здесь ...?

+0

Вы _need_ назвать ваши кнопки. – SLaks

+1

Ой! Используйте 'foreach (string lang in langs)' вместо 'for (int i = 0; i <(langs.Length - 1); i ++)'. –

+1

@SLaks Спасибо, он используется только для тестирования ... –

ответ

2

И наконец выяснилось, что это Ошибка представлена ​​MS.

Это хорошо объяснено здесь.

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

CheckedListBox SetItemChecked method not working

Таким образом, мы должны найти обходной путь ... Я попробовал follwing путь, он работает хорошо ...

На том месте, где я звонил проверки элементов I добавили следующее ... Я добавляю то, что мне нужно проверить в Тег управления.

if (!string.IsNullOrEmpty(search.Languages)) 
{ 
    clbLang.Tag = search.Languages; 
} 

Затем, следующий код в событии "VisibleChanged()" этого элемента управления.

private void clbLang_VisibleChanged(object sender, EventArgs e) 
    { 
     string lngs = clbLang.Tag as string; 
     if (!string.IsNullOrEmpty(lngs)) 
     { 
      string[] langs = lngs.Split(','); 
      foreach (string lang in langs) 
      { 
       int j = 0; 
       foreach (DataRowView row in clbLang.Items) 
       { 
        if (row != null) 
        { 
         string lng = row[1] as string; 
         if (lng.Trim() == lang) 
         { 
          clbLang.SetItemChecked(j, true); 
          break; 
         } 
        } 
        j++; 
       } 
      } 
     } 
    } 

Это хорошо работает со мной, надеюсь, что это принесет пользу вам ...

+0

Вы должны сообщить об ошибке в MS Connect. – SLaks