ListView не может установить флажок

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

Затем я использую приведенный ниже код, чтобы установить флажок в каждой строке, все проверяются, кроме 3 Johns, но если я вижу 1 из 3 Johns в списке без прокрутки, а затем запускаю код ниже, видимый John проверяется.

 for (int i = 0; i < this._items.Count; i++)
            {

                    this._items[i].Checked = true;
            }

Я проверил состояние флажка непосредственно перед его проверкой в ​​​​вышеприведенном коде, и если Джон виден, то флажок считает, что он не отмечен (ложь), если он не виден, он считает, что он отмечен (правда). Таким образом, при наличии одного видимого Джона на экране флажок выглядит неотмеченным, и запуск теста доказывает, что он не отмечен, для двух Джонов, которых я не вижу, они считают, что они отмечены, но если я прокручиваю вниз, чтобы увидеть их, это не так.

Есть идеи?


person Community    schedule 29.06.2009    source источник
comment
В каких случаях вы заполняете коллекцию this._items?   -  person Fredrik Mörk    schedule 30.06.2009


Ответы (2)


Готовые .NET ListViews (WinForms) в виртуальном режиме не поддерживают флажки. Они работают ненадежно и порождают странные баги. Я никогда не видел ту, которую вы описываете, но это меня не удивляет.

Ваше решение состоит в следующем:

  1. использовать не виртуальный ListView
  2. используйте ObjectListView, который поддерживает флажки в виртуальных списках.
person Grammarian    schedule 14.07.2009

У меня точно такая же проблема, и я не в виртуальном режиме. Я запустил программу в режиме отладки и по инструкции:

listView1.Items[количество].Checked = true;

выполняется («счетчик» является функциональным счетчиком), флажки в моем списке не будут отмечены. Иногда один или два из них будут без видимой причины, хотя строка читается для всех флажков, которые нужно проверить...

Мне будет очень интересна любая изюминка!

Спасибо, Кристоф

person Community    schedule 21.08.2009