ListView.Refresh «очищает» список

Мой код перебирает операции и добавляет обратную связь в элемент управления списком. Раньше мой код работал нормально, но сегодня что-то изменилось...

Элемент управления списком начинается так: before

... но после того, как я вызову Update() или Refresh(), вместо того, чтобы показывать элементы, которые я добавил, это выглядит так:

после

На данный момент элемент управления все еще включен и виден. На самом деле единственное взаимодействие моего кода с ним — это добавление новых элементов и функция Update().

Чтобы добавить элементы, я использую следующее:

lvwDrawings.Items.Add(new ListViewItem(new string[]
{
    drawing.PartNo,
    drawing.Revision.ToString(),
    drawing.Issue,
    drawing.DrgTypeText,
    errorStatus !=null ? errorStatus : drawing.Status,
    drawing.Filepath
}));

На случай, если я создал здесь какую-то проблему, я протестировал более простой lvwDrawings.Items.Add("test");, но результат был тот же. Если я делаю QuickWatch, элемент управления правильно сообщает мне, что он содержит x элементов...


person CJM    schedule 17.08.2012    source источник
comment
похоже на временный глюк? Попробуйте перезагрузиться. Попробуйте сделать полную сборку. Попробуйте отключить любые другие программы, которые могут повлиять на Windows в вашей системе. Изменили ли вы какие-либо свойства проекта? Добавить новые ссылки? Это происходит, если вы создаете новый пустой проект и вставляете в него свой код?   -  person Sam Axe    schedule 17.08.2012
comment
Я попытался перезапустить VS, но без изменений. Сейчас попробую перезагрузить. Произошло множество других изменений, но не касающихся этого элемента управления. Я пытался думать об изменениях, которые могут быть подозрительными...   -  person CJM    schedule 17.08.2012
comment
Вы пытались сделать lvwDrawings.RedrawItems? Когда вы создадите новый элемент ListViewItem, будут ли у нового элемента какие-либо свойства null?   -  person Kcvin    schedule 17.08.2012
comment
@Dan-o - не временный сбой - просто мой косяк. PEBCAK: en.wiktionary.org/wiki/PEBCAK   -  person CJM    schedule 17.08.2012


Ответы (1)


Хорошо, я нашел проблему - по какой-то неизвестной причине, где раньше у меня было lvwDrawings.Items.Clear() для очистки списка между разными запусками, я каким-то образом получил lvwDrawings.Clear(). Это очищает не только элементы в списке, но и столбцы.

Это любопытно по двум причинам: я бы подумал, что когда я пытался добавить ListViewItem с определенными столбцами, он возражал бы, когда столбцов не было, а также, что, черт возьми, я думал, что делал, когда я сделал изменять(??!).

Умеренно интересное развлечение:

Я обнаружил проблему, создав второй список ниже первого и работая, пока не столкнулся с проблемой. В рамках этого процесса я добавил в дизайн столбцы, один из которых назвал Path, против чего дизайнер не возражал.

Однако в коде ссылки на методы статического класса Path (например, Path.GetDirectoryName()) приводили к ошибке — «Путь ColumnHeader не имеет метода «xxx» или подобного. Понятно, что предполагалось, что когда я говорил о пути, я имел в виду столбец в списке.

Кроме того, когда я переименовал столбец (в «FullPath»), он переименовал все ссылки на «Путь» в коде, например. FullPath.GetDirectoryName()....

person CJM    schedule 17.08.2012
comment
Удачи в диагностике и решении проблемы! Приятно видеть, как люди тренируют свои навыки отладки. - person Sam Axe; 17.08.2012
comment
О, мои навыки отладки более чем достаточны. Грустно. ;) - person CJM; 17.08.2012