Разбиение по страницам и упорядочение данных отчета (C#)
Разбиение на страницы и сортировка — это две очень распространенные функции при отображении данных в интерактивном приложении. В этом руководстве мы впервые рассмотрим добавление сортировки и разбиения на страницы в наши отчеты, которые затем мы будем использовать в будущих руководствах.
Введение
Разбиение на страницы и сортировка — это две очень распространенные функции при отображении данных в интерактивном приложении. Например, при поиске ASP.NET книг в интернет-магазине таких книг могут быть сотни, но в отчете, в котором перечислены результаты поиска, на страницу будет указано только десять совпадений. Кроме того, результаты можно отсортировать по названию, цене, количеству страниц, имени автора и т. д. Хотя в последних 23 учебниках было рассмотрено, как создавать различные отчеты, включая интерфейсы, которые позволяют добавлять, изменять и удалять данные, мы не рассмотрели, как сортировать данные, и единственные примеры разбиения на страницы были с элементами управления DetailsView и FormView.
В этом руководстве мы посмотрим, как добавить сортировку и разбиение на страницы в отчеты, что можно сделать, просто установив несколько флажков. К сожалению, эта упрощенная реализация имеет свои недостатки: интерфейс сортировки оставляет желать лучшего, а процедуры разбиения по страницам не предназначены для эффективного разбиения по страницам по большим результирующим наборам. В будущих руководствах будет показано, как преодолеть ограничения, связанные с встроенными решениями для разбиения по страницам и сортировки.
Шаг 1. Добавление веб-страниц руководства по разбиению по страницам и сортировке
Прежде чем приступить к работе с этим руководством, давайте добавим ASP.NET страниц, необходимых для этого руководства и следующих трех. Для начала создайте в проекте папку с именем PagingAndSorting
. Затем добавьте следующие пять страниц ASP.NET в эту папку, чтобы все они были настроены для использования master страницы Site.master
:
Default.aspx
SimplePagingSorting.aspx
EfficientPaging.aspx
SortParameter.aspx
CustomSortingUI.aspx
Рис. 1. Создание папки PagingAndSorting и добавление руководства ASP.NET pages
Затем откройте страницу Default.aspx
и перетащите SectionLevelTutorialListing.ascx
элемент управления "Пользовательский элемент управления" из UserControls
папки в область Конструктор. Этот пользовательский элемент управления, созданный в руководстве по эталонным страницам и навигации сайта , перечисляет карту сайта и отображает эти руководства в текущем разделе маркированного списка.
Рис. 2. Добавление элемента управления SectionLevelTutorialListing.ascx в Default.aspx
Чтобы в маркированных списках отображались руководства по разбиению по страницам и сортировке, которые мы будем создавать, необходимо добавить их на карту сайта. Web.sitemap
Откройте файл и добавьте следующую разметку после разметки узла Редактирование, Вставка и Удаление карты сайта:
<siteMapNode title="Paging and Sorting" url="~/PagingAndSorting/Default.aspx"
description="Samples of Reports that Provide Paging and Sorting Capabilities">
<siteMapNode url="~/PagingAndSorting/SimplePagingSorting.aspx"
title="Simple Paging & Sorting Examples"
description="Examines how to add simple paging and sorting support." />
<siteMapNode url="~/PagingAndSorting/EfficientPaging.aspx"
title="Efficiently Paging Through Large Result Sets"
description="Learn how to efficiently page through large result sets." />
<siteMapNode url="~/PagingAndSorting/SortParameter.aspx"
title="Sorting Data at the BLL or DAL"
description="Illustrates how to perform sorting logic in the Business Logic
Layer or Data Access Layer." />
<siteMapNode url="~/PagingAndSorting/CustomSortingUI.aspx"
title="Customizing the Sorting User Interface"
description="Learn how to customize and improve the sorting user interface." />
</siteMapNode>
Рис. 3. Обновление карты сайта для включения новых страниц ASP.NET
Шаг 2. Отображение сведений о продукте в GridView
Прежде чем реализовать возможности разбиения по страницам и сортировки, давайте сначала создадим стандартный неотсортируемый, неустранительный GridView, содержащий сведения о продукте. Эту задачу мы уже много раз выполняли в рамках этой серии руководств, поэтому эти действия должны быть знакомы. Начните с открытия SimplePagingSorting.aspx
страницы и перетащите элемент управления GridView с панели элементов на Designer, задав для его ID
свойства значение Products
. Затем создайте объект ObjectDataSource, который использует метод класса GetProducts()
ProductsBLL для возврата всех сведений о продукте.
Рис. 4. Получение сведений обо всех продуктах с помощью метода GetProducts()
Так как этот отчет доступен только для чтения, нет необходимости сопоставлять методы ObjectDataSource Insert()
, Update()
или Delete()
с соответствующими ProductsBLL
методами. Поэтому в раскрывающемся списке для вкладок UPDATE, INSERT и DELETE выберите (Нет).
Рис. 5. Выбор параметра (Нет) в списке Drop-Down на вкладках UPDATE, INSERT и DELETE
Далее давайте настроим поля GridView таким образом, чтобы отображались только названия продуктов, поставщиков, категорий, цен и состояний, которые прекращены. Кроме того, вы можете вносить любые изменения в форматирование на уровне полей, такие как изменение HeaderText
свойств или форматирование цены в виде валюты. После этих изменений декларативная разметка GridView должна выглядеть примерно так:
<asp:GridView ID="Products" runat="server" AutoGenerateColumns="False"
DataKeyNames="ProductID" DataSourceID="ObjectDataSource1"
EnableViewState="False">
<Columns>
<asp:BoundField DataField="ProductName" HeaderText="Product"
SortExpression="ProductName" />
<asp:BoundField DataField="CategoryName" HeaderText="Category"
ReadOnly="True" SortExpression="CategoryName" />
<asp:BoundField DataField="SupplierName" HeaderText="Supplier"
ReadOnly="True" SortExpression="SupplierName" />
<asp:BoundField DataField="UnitPrice" HeaderText="Price"
SortExpression="UnitPrice" DataFormatString="{0:C}"
HtmlEncode="False" />
<asp:CheckBoxField DataField="Discontinued" HeaderText="Discontinued"
SortExpression="Discontinued" />
</Columns>
</asp:GridView>
На рисунке 6 показан прогресс, достигнутый на данный момент при просмотре через браузер. Обратите внимание, что на странице перечислены все продукты на одном экране, где отображаются название, категория, поставщик, цена и состояние прекращено.
Рис. 6. Каждый из продуктов отображается в списке (щелкните для просмотра полноразмерного изображения)
Шаг 3. Добавление поддержки разбиения по страницам
Перечисление всех продуктов на одном экране может привести к перегрузке информации для пользователя, просматривающего данные. Чтобы сделать результаты более управляемыми, мы можем разделить данные на более мелкие страницы данных и позволить пользователю пошагово просматривать данные по одной странице за раз. Для этого просто проверка флажок Enable Paging (Включить разбиение по страницам) из смарт-тега GridView (при этом свойству GridView s AllowPaging
присваивается значение true
).
Рис. 7. Установите флажок Включить разбиение на страницы, чтобы добавить поддержку разбиения по страницам (щелкните для просмотра полноразмерного изображения)
Включение разбиения по страницам ограничивает количество записей, отображаемых на странице, и добавляет интерфейс разбиения на страницы в GridView. Интерфейс разбиения по умолчанию, показанный на рис. 7, представляет собой ряд номеров страниц, что позволяет пользователю быстро переходить с одной страницы данных на другую. Этот интерфейс подкачки должен выглядеть знакомым, как мы видели при добавлении поддержки разбиения по страницам в элементы управления DetailsView и FormView в предыдущих руководствах.
Элементы управления DetailsView и FormView отображают только одну запись на странице. GridView, однако, обращается к своему PageSize
свойству , чтобы определить, сколько записей будет отображаться на странице (по умолчанию это свойство имеет значение 10).
Этот интерфейс подкачки GridView, DetailsView и FormView можно настроить с помощью следующих свойств:
PagerStyle
указывает сведения о стиле для интерфейса разбиения по страницам; может указывать такие параметры, какBackColor
,ForeColor
,CssClass
,HorizontalAlign
и т. д.PagerSettings
содержит набор свойств, которые могут настраивать функциональность интерфейса разбиения на страницы;PageButtonCount
указывает максимальное число числовых номеров страниц, отображаемых в интерфейсе разбиения на страницы (значение по умолчанию — 10);Mode
свойство указывает, как работает интерфейс разбиения по страницам, и может иметь значение :NextPrevious
отображает кнопки Далее и Назад, позволяющие пользователю переходить вперед или назад на одну страницу за раз.NextPreviousFirstLast
в дополнение к кнопкам Далее и Назад также включены кнопки First и Last, что позволяет пользователю быстро перейти на первую или последнюю страницу данных.Numeric
отображает ряд номеров страниц, позволяя пользователю немедленно перейти на любую страницуNumericFirstLast
в дополнение к номерам страниц, включает кнопки First и Last, что позволяет пользователю быстро перейти на первую или последнюю страницу данных; Кнопки "Первый/Последний" отображаются только в том случае, если все числовые номера страниц не помещаются
Кроме того, GridView, DetailsView и FormView предлагают PageIndex
свойства и PageCount
, которые указывают на текущую страницу и общее количество страниц данных соответственно. Свойство PageIndex
индексируется, начиная с 0, что означает, что при просмотре первой страницы данных PageIndex
будет равно 0. PageCount
, с другой стороны, начинает подсчет с 1, то PageIndex
есть ограничен значениями от 0 до PageCount - 1
.
Давайте уйдем на минутку, чтобы улучшить внешний вид интерфейса подкачки GridView по умолчанию. В частности, пусть интерфейс разбиения по страницам выравнивается по правому краю со светло-серым фоном. Вместо того чтобы задавать эти свойства напрямую с помощью свойства GridView PagerStyle
, давайте создадим класс CSS в с Styles.css
именем PagerRowStyle
, а затем назначим PagerStyle
свойство s CssClass
с помощью темы. Начните с открытия Styles.css
и добавления следующего определения класса CSS:
.PagerRowStyle
{
background-color: #ddd;
text-align: right;
}
Затем откройте GridView.skin
файл в папке DataWebControls
в папке App_Themes
. Как мы говорили в руководстве по эталонным страницам и навигации по сайту , файлы обложки можно использовать для указания значений свойств по умолчанию для веб-элемента управления. Таким образом, дополнить существующие параметры, включив в свойство s CssClass
значение PagerStyle
PagerRowStyle
. Кроме того, давайте настроим интерфейс разбиения на страницы для отображения не более пяти числовых кнопок страницы с помощью интерфейса разбиения по страницам NumericFirstLast
.
<asp:GridView runat="server" CssClass="DataWebControlStyle">
<AlternatingRowStyle CssClass="AlternatingRowStyle" />
<RowStyle CssClass="RowStyle" />
<HeaderStyle CssClass="HeaderStyle" />
<FooterStyle CssClass="FooterStyle" />
<SelectedRowStyle CssClass="SelectedRowStyle" />
<PagerStyle CssClass="PagerRowStyle" />
<PagerSettings Mode="NumericFirstLast" PageButtonCount="5" />
</asp:GridView>
Взаимодействие пользователя с разбиением по страницам
На рисунке 8 показана веб-страница при посещении в браузере после того, как установлен флажок Включить разбиение по страницам GridView и PagerStyle
выполнены конфигурации и PagerSettings
с помощью GridView.skin
файла. Обратите внимание, что отображаются только десять записей, а интерфейс разбиения на страницы указывает, что мы просматриваем первую страницу данных.
Рис. 8. Если включено разбиение по страницам, одновременно отображается только подмножество записей (щелкните для просмотра полноразмерного изображения)
Когда пользователь щелкает один из номеров страниц в интерфейсе разбиения на страницы, происходит обратная связь и страница перезагружается с отображением записей запрошенной страницы. На рисунке 9 показаны результаты после просмотра последней страницы данных. Обратите внимание, что последняя страница содержит только одну запись. Это связано с тем, что в общей сложности 81 запись, в результате чего восемь страниц по 10 записей на странице плюс одна страница с одинокой записью.
Рис. 9. Нажатие кнопки "По номеру страницы" приводит к обратной отправке и отображает соответствующее подмножество записей (щелкните для просмотра полноразмерного изображения)
Рабочий процесс Server-Side разбиения по страницам
Когда пользователь нажимает кнопку в интерфейсе разбиения на страницы, выполняется обратная связь и начинается следующий рабочий процесс на стороне сервера:
- Срабатывает событие GridView (или DetailsView или FormView)
PageIndexChanging
- ObjectDataSource повторно запрашивает все данные из BLL; Значения свойств GridView
PageIndex
иPageSize
используются для определения записей, возвращаемых из BLL, должны отображаться в GridView. - Срабатывает событие GridView
PageIndexChanged
На шаге 2 объект ObjectDataSource повторно запрашивает все данные из своего источника данных. Этот стиль разбиения на страницы обычно называется разбиением по умолчанию, так как это поведение разбиения на страницы, используемое по умолчанию при задании свойству AllowPaging
значения true
. При разбиении на страницы по умолчанию веб-элемент управления данными наивно извлекает все записи для каждой страницы данных, несмотря на то, что в HTML-коде, отправляемом в браузер, фактически отображается только подмножество записей. Если данные базы данных не кэшируются BLL или ObjectDataSource, разбиение на страницы по умолчанию невозможно для достаточно больших результирующих наборов или веб-приложений с большим количеством одновременных пользователей.
В следующем руководстве мы рассмотрим, как реализовать настраиваемую разбиение по страницам. С помощью пользовательского разбиения на страницы можно специально указать ObjectDataSource, чтобы получить только точный набор записей, необходимых для запрошенной страницы данных. Как вы можете себе представить, пользовательское разбиение по страницам значительно повышает эффективность разбиения по страницам по большим результирующим наборам.
Примечание
Хотя разбиение на страницы по умолчанию не подходит при разбиении на страницы через достаточно большие результирующие наборы или для сайтов с несколькими одновременными пользователями, следует понимать, что пользовательское разбиение на страницы требует дополнительных изменений и усилий для реализации и не так просто, как проверка флажка (как и разбиение на страницы по умолчанию). Таким образом, разбиение по умолчанию может быть идеальным выбором для небольших веб-сайтов с низким уровнем трафика или при разбиении по страницам через относительно небольшие наборы результатов, так как его гораздо проще и быстрее реализовать.
Например, если мы знаем, что у нас никогда не будет более 100 продуктов в нашей базе данных, минимальный прирост производительности пользовательского разбиения по страницам, скорее всего, будет компенсирован усилиями, необходимыми для его реализации. Однако если в один прекрасный день у нас могут быть тысячи или десятки тысяч продуктов, то не реализация пользовательского разбиения по страницам значительно затруднила бы масштабируемость нашего приложения.
Шаг 4. Настройка интерфейса подкачки
Веб-элементы управления данными предоставляют ряд свойств, которые можно использовать для улучшения взаимодействия пользователя с разбиением по страницам. Свойство PageCount
, например, указывает, сколько всего страниц, в то время как PageIndex
свойство указывает на текущую страницу, просматриваемую и может быть настроено для быстрого перемещения пользователя на определенную страницу. Чтобы продемонстрировать, как использовать эти свойства для улучшения взаимодействия пользователя с разбиением по страницам, давайте добавим на страницу веб-элемент управления Метка, который сообщает пользователю, какую страницу он в настоящее время посещает, а также элемент управления DropDownList, который позволяет быстро перейти на любую заданную страницу.
Сначала добавьте элемент управления Label Web на страницу, задайте для его ID
свойства PagingInformation
значение и очистите его Text
свойство. Затем создайте обработчик событий для события GridView DataBound
и добавьте следующий код:
protected void Products_DataBound(object sender, EventArgs e)
{
PagingInformation.Text = string.Format("You are viewing page {0} of {1}...",
Products.PageIndex + 1, Products.PageCount);
}
Этот обработчик событий назначает PagingInformation
свойство Label для Text
сообщения, информирующего пользователя о просмотре Products.PageIndex + 1
страницы из общего количества страниц Products.PageCount
(мы добавляем к свойству Products.PageIndex
1, так как PageIndex
индексируется с 0). Я выбрал свойство Assign this Labels Text
в DataBound
обработчике событий, а не PageIndexChanged
обработчика событий, так как DataBound
событие срабатывает каждый раз, когда данные привязаны PageIndexChanged
к GridView, в то время как обработчик событий срабатывает только при изменении индекса страницы. Когда GridView изначально привязан к данным при первом посещении страницы, PageIndexChanging
событие не срабатывает (в то время как DataBound
это происходит).
С этим добавлением пользователю теперь отображается сообщение, указывающее, какую страницу он посещает и сколько всего страниц данных.
Рис. 10. Отображается текущее количество страниц и общее количество страниц (щелкните для просмотра полноразмерного изображения)
В дополнение к элементу управления Метка также добавим элемент управления DropDownList, который перечисляет номера страниц в GridView с выбранной просматриваемой страницей. Идея заключается в том, что пользователь может быстро перейти с текущей страницы на другую, просто выбрав новый индекс страницы из Раскрывающегося списка. Начните с добавления Раскрывающегося списка в Designer, присвоив свойству PageList
значение ID
и проверив параметр Включить AutoPostBack из смарт-тега.
Затем вернитесь к обработчику DataBound
событий и добавьте следующий код:
// Clear out all of the items in the DropDownList
PageList.Items.Clear();
// Add a ListItem for each page
for (int i = 0; i < Products.PageCount; i++)
{
// Add the new ListItem
ListItem pageListItem = new ListItem(string.Concat("Page ", i + 1), i.ToString());
PageList.Items.Add(pageListItem);
// select the current item, if needed
if (i == Products.PageIndex)
pageListItem.Selected = true;
}
Этот код начинается с очистки элементов в раскрывающемся PageList
списке. Это может показаться лишним, так как количество страниц не изменится, но другие пользователи могут одновременно использовать систему, добавляя или удаляя записи из Products
таблицы. Такие вставки или удаления могут изменить количество страниц данных.
Затем необходимо снова создать номера страниц и иметь тот, который сопоставляется с текущим GridView, PageIndex
выбранным по умолчанию. Мы делаем это с циклом от 0 до PageCount - 1
, добавляя новый ListItem
в каждой итерации и устанавливая для его Selected
свойства значение true, если текущий индекс итерации равен свойству GridView PageIndex
.
Наконец, необходимо создать обработчик событий для события DropDownList SelectedIndexChanged
, которое срабатывает каждый раз, когда пользователь выбирает другой элемент из списка. Чтобы создать этот обработчик событий, просто дважды щелкните Раскрывающийся список в Designer, а затем добавьте следующий код:
protected void PageList_SelectedIndexChanged(object sender, EventArgs e)
{
// Jump to the specified page
Products.PageIndex = Convert.ToInt32(PageList.SelectedValue);
}
Как показано на рисунке 11, простое изменение свойства GridView PageIndex
приводит к тому, что данные будут восстановлены в GridView. В обработчике событий GridView DataBound
выбран соответствующий раскрывающийся список ListItem
.
Рис. 11. Пользователь автоматически перейдет на шестую страницу при выборе элемента списка page 6 Drop-Down (щелкните, чтобы просмотреть полноразмерное изображение)
Шаг 5. Добавление поддержки сортировки Bi-Directional
Добавить поддержку двунаправленной сортировки так же просто, как добавить поддержку разбиения по страницам, просто проверка параметр Включить сортировку из смарт-тега GridView (который задает свойству true
GridView значение AllowSorting
). При этом каждый из заголовков полей GridView отображается как LinkButtons, который при щелчке вызывает обратную передачу и возвращает данные, отсортированные по указанному столбцу в порядке возрастания. Если щелкнуть тот же заголовок LinkButton, данные снова сортируются в порядке убывания.
Примечание
Если вы используете пользовательский уровень доступа к данным, а не типизированный набор данных, возможно, у вас нет параметра Включить сортировку в смарт-теге GridView. Этот флажок доступен только для GridView, привязанных к источникам данных, которые изначально поддерживают сортировку. Typed DataSet обеспечивает поддержку сортировки, так как ADO.NET DataTable предоставляет Sort
метод, который при вызове сортирует DataTable DataRows с использованием указанных условий.
Если DAL не возвращает объекты, которые изначально поддерживают сортировку, необходимо настроить ObjectDataSource для передачи сведений о сортировке уровню бизнес-логики, который может сортировать данные или отсортировать данные по DAL. В будущем мы рассмотрим, как сортировать данные на уровнях бизнес-логики и доступа к данным.
Сортируемые linkButtons отображаются в виде гиперссылок HTML, текущие цвета которых (синий для невидимой ссылки и темно-красный для посещенной ссылки) конфликтуют с цветом фона строки заголовка. Вместо этого пусть все ссылки на строки заголовков отображаются белым цветом, независимо от того, были ли они посещены или нет. Это можно сделать, добавив в класс следующее Styles.css
:
.HeaderStyle a, .HeaderStyle a:visited
{
color: White;
}
Этот синтаксис указывает на использование белого текста при отображении этих гиперссылок в элементе, использующего класс HeaderStyle.
После этого добавления CSS при посещении страницы в браузере экран должен выглядеть примерно так, как на рисунке 12. В частности, на рисунке 12 показаны результаты после щелчка ссылки на заголовок поля Price.
Рис. 12. Результаты были отсортированы по единицам в порядке возрастания (щелкните для просмотра полноразмерного изображения)
Изучение рабочего процесса сортировки
Все поля GridView BoundField, CheckBoxField, TemplateField и т. д. имеют SortExpression
свойство, указывающее выражение, которое следует использовать для сортировки данных при щелчке ссылки на заголовок сортировки этого поля. GridView также имеет SortExpression
свойство . Если щелкнуть заголовок сортировки LinkButton, GridView присваивает значение этого поля SortExpression
свойству SortExpression
. Затем данные повторно извлекаются из ObjectDataSource и сортируются в соответствии со свойством GridView.SortExpression
В следующем списке подробно описана последовательность шагов, которая выполняется, когда пользователь сортирует данные в GridView:
- Срабатывает событие сортировки GridView
- Свойству GridView задано
SortExpression
SortExpression
значение поля, для которого был щелкнун заголовок сортировки LinkButton. - ObjectDataSource повторно извлекает все данные из BLL, а затем сортирует данные с помощью GridView
SortExpression
- Свойство GridView
PageIndex
сбрасывается до 0, что означает, что при сортировке пользователь возвращается на первую страницу данных (при условии, что реализована поддержка разбиения по страницам). - Срабатывает событие GridView
Sorted
Как и при разбиении по страницам по умолчанию, параметр сортировки по умолчанию повторно извлекает все записи из BLL. При использовании сортировки без разбиения по страницам или при использовании сортировки с разбиением по страницам по умолчанию не существует способа обойти это снижение производительности (за исключением кэширования данных базы данных). Однако, как мы увидим в следующем руководстве, можно эффективно сортировать данные при использовании пользовательского разбиения по страницам.
При привязке ObjectDataSource к GridView с помощью раскрывающегося списка в смарт-теге GridView каждому полю GridView автоматически присваивается свойство SortExpression
имени поля данных в ProductsRow
классе. Например, параметру ProductName
BoundField SortExpression
задано значение ProductName
, как показано в следующей декларативной разметке:
<asp:BoundField DataField="ProductName" HeaderText="Product"
SortExpression="ProductName" />
Поле можно настроить таким образом, чтобы его нельзя было сортировать, очищая его SortExpression
свойство (присваивая его пустой строке). Чтобы проиллюстрировать это, представьте, что мы не хотим, чтобы наши клиенты сортируют наши продукты по цене. Свойство UnitPrice
BoundField можно удалить из декларативной SortExpression
разметки или с помощью диалогового окна Поля (которое можно открыть, щелкнув ссылку Изменить столбцы в смарт-теге GridView).
Рис. 13. Результаты были отсортированы по единице в порядке возрастания
SortExpression
После удаления свойства для UnitPrice
BoundField заголовок отображается в виде текста, а не ссылки, тем самым не позволяя пользователям сортировать данные по цене.
Рис. 14. При удалении свойства SortExpression пользователи больше не могут сортировать продукты по цене (щелкните для просмотра полноразмерного изображения)
Программная сортировка GridView
Вы также можете отсортировать содержимое GridView программным способом с помощью метода GridViewSort
. Просто передайте SortExpression
значение для сортировки вместе с SortDirection
(Ascending
или Descending
), и данные GridView будут отсортированы повторно.
Представьте, что мы отключили сортировку UnitPrice
по , потому что мы беспокоились, что наши клиенты будут просто покупать только самые дешевые продукты. Тем не менее, мы хотим поощрять их покупать самые дорогие продукты, поэтому мы хотели бы, чтобы они могли сортировать продукты по цене, но только от самой дорогой цены до минимума.
Для этого добавьте веб-элемент управления Button на страницу, присвойте свойству ID
SortPriceDescending
значение , а свойству Text
— значение Сортировка по цене. Затем создайте обработчик событий для события Button, Click
дважды щелкнув элемент управления Кнопка в Designer. Добавьте следующий код в этот обработчик событий:
protected void SortPriceDescending_Click(object sender, EventArgs e)
{
// Sort by UnitPrice in descending order
Products.Sort("UnitPrice", SortDirection.Descending);
}
Нажатие этой кнопки возвращает пользователя на первую страницу с продуктами, отсортированных по цене, от самых дорогих до наименее дорогих (см. рис. 15).
Рис. 15. Нажатие кнопки Заказ продуктов от самых дорогих к наименьшим (щелкните для просмотра полноразмерного изображения)
Сводка
В этом руководстве мы узнали, как реализовать возможности разбиения по страницам и сортировки по умолчанию, которые были так же просты, как установить флажок. Когда пользователь сортирует данные или просматривает страницы, разворачивается аналогичный рабочий процесс:
- После этого возникает обратная связь
- Событие предварительного уровня веб-элемента управления данными (
PageIndexChanging
илиSorting
) - Объект ObjectDataSource повторно извлекает все данные.
- Событие постуровневого веб-элемента управления данными (
PageIndexChanged
илиSorted
)
Хотя реализация базового разбиения по страницам и сортировки является простой задачей, необходимо приложить больше усилий для использования более эффективного пользовательского разбиения по страницам или для дальнейшего улучшения интерфейса разбиения по страницам или сортировки. Эти темы будут рассмотрены в будущих руководствах.
Счастливого программирования!
Об авторе
Скотт Митчелл( Scott Mitchell), автор семи книг ASP/ASP.NET и основатель 4GuysFromRolla.com, работает с веб-технологиями Майкрософт с 1998 года. Скотт работает независимым консультантом, тренером и писателем. Его последняя книга Sams Teach Yourself ASP.NET 2.0 в 24 часах. Он может быть доступен в mitchell@4GuysFromRolla.com. или через его блог, который можно найти по адресу http://ScottOnWriting.NET.