Как отсортировать элемент управления winforms listview?
Мой текущий проект включает в себя ownerdraw ListView с 6 столбцами, используемыми только в детальном представлении. Я редко использую ListView, поэтому, скорее всего, просто упускаю что-то очевидное. Мне не нужно сортировать по каждому столбцу. Достаточно отсортировать весь список (на col 0). Форма загружается со свойством ListView.Sorting, установленным в значение по возрастанию. У меня есть ComboBox для выбора порядка сортировки. Я не использую ни один. Просто восходящий / нисходящий.
Но когда я переключаюсь между восходящим / нисходящим, все, что я получаю, - это короткое мерцание и отсутствие изменений в порядке сортировки. Вот код для переключения свойства сортировки:
Private Sub cmb_Sorting_SelectionChangeCommitted() _ Handles cmb_Sorting.SelectionChangeCommitted Try Select Case cmb_Sorting.SelectedIndex Case 0 lvFiles.Sorting = SortOrder.Ascending Case 1 lvFiles.Sorting = SortOrder.Descending End Select Catch ex As Exception MsgBox(ex.ToString) End Try End Sub
Что я уже пробовал:
Честно говоря, я не знал, что и попробовать. Я добавил msgbox, чтобы показать мне свойство сортировки каждый раз, когда я выбираю из списка, и, по-видимому, порядок сортировки меняется. Но изменение не отражается на контроле. Я делаю что-то не так?
Спасибо - АБ
DerekT-P
Не могли бы вы предоставить свою разметку и серверный код, пожалуйста; нам нужно будет понять, когда/как вы заполняете listview и т. д.
Alan Burkhart
Это настольное приложение Windows Forms.
1. заимствования cmd.exe кратко, чтобы получить список каталогов, затем выполняет поиск совпадений по именам файлов и / или тексту. Это делается в фоновом потоке.
2. Каждый dir ищется, и если совпадения найдены, создается новая listviewgroup (с путем dir в качестве его текста), и элементы назначаются группе.
DerekT-P
Я предполагаю, что вы прошли через код, чтобы проверить .Метод сортировки действительно вызывается? Вы определили какой-либо пользовательский метод сравнения? Пробовали ли вы явно вызвать метод .Sort() после установки последовательности сортировки для принудительной повторной сортировки? И вы проверили, что форма не перезагружает данные каждый раз, когда изменяется выбор поля со списком?
(Кстати, зачем использовать отдельный поток с cmd.exe просто чтобы поискать в некоторых каталогах совпадающие имена файлов??)
Alan Burkhart
Что касается использования cmd.exe, это был быстрый и простой способ получить список каталогов, не имея дела с какими-либо нарушениями доступа. И я должен добавить, что это не производственный код. Это просто утилита для моего собственного использования. Я этим не зарабатываю на жизнь.
Я попытался решить проблему сортировки, создав отдельный проект, в котором не было ничего, кроме ListView и 2 радиокнопок для выбора порядка сортировки (элементы, добавленные в конструктор). Тот же результат.
Общественного Класса Form1
Private Sub RadioButton1_CheckedChanged() Обрабатывает RadioButton1.CheckedChanged
LV.сортировка = сортировщик.Восходящий
Конец Подводной Лодки
Private Sub RadioButton2_CheckedChanged() Обрабатывает RadioButton2.CheckedChanged
LV.сортировка = сортировщик.Нисходящий
Конец Подводной Лодки
End Класса
Насколько я понимаю, установка свойства сортировки-это все, что требуется, если только я не выполняю пользовательскую сортировку, а это не так. Мне нужно только отсортировать имена файлов.