Можно ли заставить ListView отображать текст, полученный через его ListViewItem.Tag? - PullRequest
0 голосов
/ 19 апреля 2010

Я бы хотел заполнить многостолбцовый System.Windows.Forms.ListView элементами, которые я сохранил в отдельном System.Collections.Generics.List<CustomClass>. Я хотел бы избежать хранения данных дважды, один раз в List<CustomClass> и один раз в виде строки в ListViewItem. Есть ли способ заставить ListViewItem использовать некоторую функцию обратного вызова, чтобы получить текст для вставки в его столбцы из свойства Tag вместо использования его свойства Text?

Обновление : я пробовал решение OnDrawSubItem , и оно работало, но у меня возникали странные проблемы с аннулированием окон (ListView всегда корректно перерисовывался, но другие окна в диалоге не было). Однако я нашел то, что искал: ListView в «виртуальном режиме» . Это позволяет заполнить ListView данными из другого источника, который автоматически обновляется при изменении источника.

Ответы [ 2 ]

1 голос
/ 19 апреля 2010

Нет, такой функции обратного вызова ListViewItem не существует. Вы можете создать CustomListView и переопределить методы OnDraw ....

1 голос
/ 19 апреля 2010

Не уверен, что я понимаю, что вы имеете в виду, если ваш List<> имеет тип string, вы можете просто добавить строки в список, и они все равно будут отображаться.

Если ваш список является классом, вы можете просто переопределить метод .ToString.

Редактировать

На основании вашего комментария. Вам нужно будет сделать пользовательский рисунок на клетки. Я думаю, что событие OnDrawSubItem - это то, которое вы хотите обработать. Затем на основе идентификатора столбца (который вы получите из DrawListViewSubItemEventArgs, вы можете установить текст.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...