Собственно есть listview, как сделать сортировку по данным в столбцах?
Есть столбец процессов - нужно по нажатию на колонку, сделать сортировку по алфавиту.
Есть столбец "память" - нужно при нажатии на заголовок столбца, сделать сортировку.
Так как это сделать?)
Сначала добавим свой класс, назовем его ListViewColumnComparer, реализуем интерфейс IComparer и реализуем из него единственный метод, который в нем содержится Compare:
class ListViewColumnComparer : IComparer
{
public int ColumnIndex { get; set; }
public ListViewColumnComparer(int columnIndex)
{
ColumnIndex = columnIndex;
}
public int Compare(object x, object y)
{
try
{
return String.Compare(
((ListViewItem)x).SubItems[ColumnIndex].Text,
((ListViewItem)y).SubItems[ColumnIndex].Text);
}
catch (Exception) // если вдруг столбец пустой (или что-то пошло не так)
{
return 0;
}
}
}
Добавить обработчик на нажатие колонки в который запихнем наш класс-компаратор:
private void listView1_ColumnClick(object sender, ColumnClickEventArgs e)
{
this.listView1.ListViewItemSorter = new ListViewColumnComparer(e.Column);
}
В принципе всё, будет сортировать в тех столбцах, на которых кликнули мышкой. Можно добавить обработку на индекс сортируемого столбца внутри конструктора ListViewColumnComparer, можно вынести в отдельную переменную значение ASC
и DESC, чтобы еще и в обратном порядке сортировать. Идея тут ясна - можно развивать.
ListView.ListViewItemSorter - возвращает или задает блок сравнения сортировки для данного элемента управления.
Интерфейс IComparer - предоставляет метод, который сравнивает два
объекта.
Нужно в событие listview_ColumnClick добавить компаратор.
Здесь и здесь достаточно понятно написано, как это сделать.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники