Программирование >>  Автоматически обновляемые приложения 

1 ... 58 59 60 [ 61 ] 62 63 64 ... 170


Листинг 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;



1 ... 58 59 60 [ 61 ] 62 63 64 ... 170

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика