Re: Remember

Самое удивительное в том, что я уже много раз переступал через обстоятельства. И в случае, если через какое-то время что-то случается, надо лишь вспомнить об этом. Или когда что-то ДЕЙСТВИТЕЛЬНО СЛУЧИТСЯ.

Asp.Net ListView Control — Sorting Data

Начнем.

Если вы используете data source control, то сортировка может быть выполнена в ListView control без написания строк кода — она выполняется автоматически ListView и его data sourse control.

Если же List View программно привязывается к данным — то есть, если у вас есть код, запрашивающий данные, потом соединяющий их с ListView’s DataSource property, и потом вызывающий ListView’s DataBind() метод — тогда вы ответственны за пересортировку данных и перепривязку их к ListView. Чтобы выполнить это, вам надо создать event handler для ListView’s Sorting event, который это то, где вы перезапрашиваете данные в определенном порядке сортировки и пересвязываете их с ListView. Мы рассмотрим как создать Sorting event hadler позднее в этой статье (хотя мы будем использовать его для более продвинутых сортивочных функций; все примеры здесь используют data source control).

 

В случае использования контрола, включить сортировку — это добавить правильно настроенную LinkButton, Button или ImageButton в ListView’s LayoutTemplate. Такая кнопка, будучи нажатой, вызовет постбэк и инициирует процесс сортировки. Чтобы это заработало, LinkButton, Button или ImageButton должны иметь свойство CommandName, установленное в Sort, и свойство CommandArgument, установленое в data field, по которому сортировать.

Пример выполнения простой сортировки без кода.

Для иллюстрации использования встроенного в ListView механизма сортировки, давайте рассмотрим простой пример (этот пример, как и другие рассматриваемые тут, доступен для загрузки в конце статьи). Давайте расширим Список Продуктов из статьи Displaying Data with the ListView (http://aspnet.4guysfromrolla.com/articles/122607-1.aspx), добавив к нему интерфейс сортировки. В точности, добавим два способа сортировки: по ProductName и по UnitPrice. Для этого просто добавим две LinkButton (или Button, или ImageButton) в ListView’s LayoutTemplate с соответствующими значениями свойств CommandName и CommandArgument.

<asp:ListView ID="ProductList" runat="server" DataSourceID="ProductDataSource">

<LayoutTemplate>

<h3>Product Listing</h3>
[<asp:LinkButton runat=»server» ID=»SortByName»
CommandName=»Sort» CommandArgument=»ProductName»>Sort by Name</asp:LinkButton>] |

[<asp:LinkButton runat=»server» ID=»SortByPrice»
CommandName=»Sort» CommandArgument=»UnitPrice»>Sort by Price</asp:LinkButton>]
<asp:PlaceHolder runat=»server» ID=»itemPlaceholder»></asp:PlaceHolder>

</LayoutTemplate>

... </asp:ListView>

(Я убрал часть разметки ListView для краткости, сосредоточив внимание на двух сортировочных LinkButton’s. Я также пропустил AccessDataSource control, к которыму привязан ListView.)

Заметим, что две сортировочные LinkButtons имеют свойства CommandName, установленные в Sort, и свойства CommandArgument, установленные в соответствующие имена полей с данными. Когда одна их этих LinkButtons кликнута, происходит постбэк и ListView автоматически вызывает свой Sort метод, использующий LinkButton’s CommandArgument значение в качестве sort expression.

Источник: http://aspnet.4guysfromrolla.com/articles/011608-1.aspx (англ.)