|
Программирование >> Автоматически обновляемые приложения
Листинг 6.51. Код, добавляемый в обработчик события ColumnClick I элемента Li fitview Вставляем следующий код в событие ColumnClick для элемента ListView Определяем, является ли колонка, на которой щелкнули, уже отсортированной колонкой if (е.Column == IvwColumnSorter.SortColumn) { Переворачиваем направление сортировки f (IvwColumnSorter.Order == SortOrder.Ascending) IvwColumnSorter.Order = SortOrder.Descending; else IvwColumnSorter.Order = SortOrder.Ascending; else { Устанавливаем колонку для сортировки По умолчанию сортировка по возрастанию IvwColumnSorter.SortColumn = е.Column; IvwColumnSorter.Order = SortOrder.Ascending; Сортируем с новыми настройками this.listViewl.Sort() ; В меню Project щелкните на пункте Add Class, чтобы добавить новый класс в проект. Замените весь код по умолчанию в новом классе кодом, приведенном в листинге 6.52. [ Листинг 6.52. Код для нового класса ListViewColmnSorter using System.Collections; using System.Windows.Forms; Проходим через все элементы и устанавливаем размер каждого заголовка колонки равным тексту foreach (ColuinnHeader ch in this.listViewl.Columns) { ch.Width = -2; } / <summary> / Этот класс реализует интерфейс IComparer. / </summary> public class ListViewColumnSorter : IComparer { / <summary> / Номер колонки, по которой проводится сортировка / </summary> private int ColumnToSort; / <summary> / Порядок, в котором проводится сортировка (например Ascending) / </summary> private SortOrder OrderOfSort; / <summary> / Объект, проводящий нечувствительную к регистру сортировку / </summary> private CaselnsensitiveComparer ObjectCompare; / <summary> / Конструктор. Инициализирует различные элементы / </summary> public ListViewColumnSorter() { Инициализировать колонку значением О ColumnToSort = 0; Иниацилизировать порядок сортировки значением попе OrderOfSort = SortOrder.None; Инициализировать объект CaselnsensitiveComparer ObjectCompare = new CaselnsensitiveComparer(); / <summary> / Этот метод унаследован от интерфейса IComparer. Он сравнивает / два переданных ему объекта, не обращая внимания на регистр / </summary> / <param пате= х >Первый объект для сравнения</рагат> / <param пате= у >Второй объект для сравнения</рагат> / <returns>Peзyльтaт сравнения. О в случае равенства, / отрицательный если х меньше у и положительный / если х больше у</returns> public int Compare(object x, object y) { int compareResult; Listviewitem listviewX, listviewY; Преобразует объекты для сравнения в объекты ListViewItem listviewX = (ListViewItem)х; listviewY = (ListViewItem)у; Сравнивает 2 значения compareResult = ObjectCompare.Compare( listviewX.Subltems[ColumnToSort].Text, listviewY.Subltems[ColumnToSort].Text); Подсчитьгоает возвращаемый результат, базируясь на результате сравнения if (OrderOfSort == SortOrder.Ascending) { Выбрана сортировка по возрастанию, возвращаем результат операции сравнения return compareResult; else if (OrderOfSort == SortOrder.Descending) { Выбрана сортировка по убьгоанию, возвращаем результат операции сравнения со знаком минус return (-compareResult); else { Возвращаем О, чтобы показать равенство return 0; / <summary> / Получает или возвращает номер колонки, к которой применять / сортировку (по умолчанию 0). / </summary> public int SortColumn set { ColumnToSort = value; get { return ColumnToSort;
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |