Использование элементов управления ListView и DataPager в ASP.NET 3.5 - Сортировка посредством метода Sort
ОГЛАВЛЕНИЕ
Сортировка посредством метода Sort
Предыдущий пример рассмотрел способ получения отсортированного списка в ListView в ответ на нажатие на LinkButton, Button и ImageButton. Но в некоторых случаях нам понадобится программно вызвать сортировку ListView. К примеру, при первой загрузке страницы нам наверняка потребуется отсортировать информацию, либо же когда у нас есть какой-нибудь другой элемент пользовательского интерфейса на странице, то нам наверняка потребуется заново отсортировать результат. Это можно реализовать, вызвав метод Sort элемента ListView, передавая в него выражение сортировки и направление.
Для того, чтобы продемонстрировать использование метода, давайте начнем с добавления в указанный выше пример кнопки (Button), при нажатии на которую результат будет отсортирован по полю CategoryName. Просто добавьте элемент управления Button, установите его свойства и затем создайте обработчик события Click. В данном обработчике просто вызовите метод Sort элемента ListView, передавая в него "CategoryName" в качестве выражения сортировки и SortDirection.Ascending в качестве направления. И это все!
Protected Sub SortByCallingSortMethodButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles SortByCallingSortMethodButton.Click
'Sort the ListView by the CategoryName field in ascending order
ProductList.Sort("CategoryName", SortDirection.Ascending)
End Sub
При нажатии на кнопку будет осуществлен постбэк и вызов метода Sort, который вызовет процесс сортировки. Все точно так же, если бы мы добавили LinkButton к LayoutTemplate и установили бы его свойства CommandName и CommandArgument в значения Sort и "CategoryName".

Создание обработчика для события Sorting элемента ListView
В определенных случаях нам может понадобиться выполнить код во время сортировки ListView. Это можно реализовать создав обработчик для события Sorting ListView, который будет вызван в начале процесса сортировки. Если информация из ListView была программно привязана, то тогда нам обязательно надо создать обработчик события Sorting, который заново отсортирует информацию и повторно привяжет ее к ListView. Но даже когда мы используем декларативные элементы управления источником данных, нам все же может понадобиться выполнить какую то специализацию по отношению к логике сортировки.
Приложение, доступное в конце данной статьи, включает в себя пример, который "запоминает" пять самых последних вариантов сортировки, используемых пользователем, и отображает их на странице в виде последовательности LinkButtons. Нажатие на один из LinkButtons повторно упорядочивает данные в соответствующем порядке. При создании данной функциональности мне понадобилось создать обработчик для события Sorting, чтобы я смог записать только что примененное сортировочное выражение и направление.
Каждый последний пользовательский выбор сортировки записывается при помощи объекта SortHistory, который является классом, созданным мною в каталоге App_Code веб-сайта. Данный класс имеет свойства SortExpression и SortDirection, а также свойства доступные только для чтения, которые возвращают свойства SortExpression и SortDirection в качестве единой строки и форматированной строки. Форматированная строка используется для отображения. Она конвертирует значения SortExpression и SortDirection - "CategoryName" и SortDirection.Descending, к примеру в более приятный результат: "Category (in descending order)".
Я также создал объект SortHistoryQueue в каталоге App_Code, который содержит буффер последних объектов SortHistory. Экземпляр SortHistoryQueue отсортирован в Session, тем самым пользовательские сортировки запоминаются между постбэками, посещениями страниц и специфичны для каждого пользователя.
В дополнение к использованию обработчика события Sorting, данный пример использует метод Sort. Как я уже упоминал ранее, последние пять сортировок пользователя отображаются в качестве списка LinkButtons - это обрабатывается при помощи элемента управления Repeater. Нажатие по LinkButton вызывает постбэк и событие ItemCommand элемента Repeater. Я создал обработчик данного события, который применяет критерий сортировки, используемый для нажатой ссылки, путем вызова метода Sort элемента ListView.
Следующие рисунки демонстрируют данную функциональность в действии. Первый демонстрирует окно обозревателя с пятью последними сортировками в виде списка.

Второй рисунок был сохранен сразу же после того, как была нажат LinkButton с названием "Sort by Name". Обратите внимание на добавленный к списку LinkButton "Name (in ascending order)" (а также результат нажатия в виде списка, отсортированного по ProductName в возрастающем порядке).
