Использование элементов управления ListView и DataPager в ASP.NET 3.5 - Группировка информации при помощи элемента управления ListView
ОГЛАВЛЕНИЕ
Группировка информации при помощи элемента управления ListView
Элемент управления ListView содержит два шаблона: LayoutTemplate и ItemTemplate. LayoutTemplate обрабатывается для генерации разметки элемента ListView и может содержать ссылку на ItemTemplate, который используется для того, чтобы обрабатывать каждую запись, привязанную к элементу ListView. LayoutTemplate ссылается на ItemTemplate посредством элемента управления серверной стороны (таким, как PlaceHolder), чье ID является таким же, как и свойство ItemPlaceholderID элемента ListView. (Свойство ItemPlaceholderID имеет стандартное значение "itemPlaceholder".)
Ссылка напрямую на ItemTemplate из LayoutTemplate является хорошей идеей в случае, если разметка внешнего вида для каждого элемента списка одинакова, но в некоторых случаях различная разметка внешнего вида должна быть предоставлена для каждого n-го элемента. Такая специализация возможна при помощи указания GroupTemplateGroupItemCount элемента ListView в n. Далее, вместо того, чтобы ссылаться на ItemTemplate в LayoutTemplate, заставьте LayoutTemplate ссылаться на GroupTemplate, а GroupTemplate ссылаться на ItemTemplate. В таком случае ItemTemplate все еще будет обоработан для каждой записи, связанной с элементом ListView, но при этом заставляет GroupTemplate обрабатываться каждые n записей, где n равно GroupItemCount. (Группового шаблона) и установки свойства
Для того, чтобы лучше понять способ группировки при помощи ListView, давайте рассмотрим первый пример, демонстрирующий набор записей в упорядоченном списке, и использующий следующую декларативную разметку для элемента управления ListView:
<asp:ListView ID="..." runat="server" DataSourceID="...">
<LayoutTemplate>
<ol>
<asp:PlaceHolder runat="server" ID="itemPlaceholder"></asp:PlaceHolder>
</ol>
</LayoutTemplate>
<ItemTemplate>
<li><%# Eval("columnName") %></li>
</ItemTemplate>
</asp:ListView>
Представьте, что мы хотим отобразить упорядоченный список для каждой группы из трех записей. Для реализации этого используйте следующую разметку:
<asp:ListView ID="ProductList1" runat="server"
DataSourceID="ProductDataSource"
GroupItemCount="3" ItemPlaceholderID="itemsGoHere"
GroupPlaceholderID="groupsGoHere">
<LayoutTemplate>
<p>
<asp:PlaceHolder runat="server" ID="groupsGoHere"></asp:PlaceHolder>
</p>
</LayoutTemplate>
<GroupTemplate>
<ol>
<asp:PlaceHolder runat="server" ID="itemsGoHere"></asp:PlaceHolder>
</ol>
</GroupTemplate>
<ItemTemplate>
<li><%#Eval("ProductName")%></li>
</ItemTemplate>
</asp:ListView>
Декларативная разметка элемента управления ListView имеет элемент <ol> в GroupTemplate. LayoutTemplate должен присутствовать и в данном примере ссылается на GroupLayout. Обратите внимание на то, что вместо того, чтобы изменять стандартные значения для группы и указателей места заполнения элементов ("groupPlaceholder" и "itemPlaceholder") я явно изменил данные значения при помощи свойств ItemPlaceHolderID и GroupPlaceholderID элемента ListView.
Представьте, что указанный выше ListView привязан к таблице сотрудников базы данных, и что в ItemTemplate мы обрабатывали колонку FullName в пределах элемента <li>. Как же будет выглядеть обработанная разметка элемента ListView?
В принципе, ListView начнет обрабатывать свой LayoutTemplate:
<p>
<asp:PlaceHolder runat="server" ID="groupsGoHere"></asp:PlaceHolder>
</p>
Затем он будет обрабатывать свой GroupTemplate для каждой группы из трех записей, привязанных к элементу ListView. Предположив, что всего было восемь сотрудников, мы в результате получили бы следующую разметку:
<ol>
<asp:PlaceHolder runat="server" ID="itemsGoHere"></asp:PlaceHolder>
</ol>
<ol>
<asp:PlaceHolder runat="server" ID="itemsGoHere"></asp:PlaceHolder>
</ol>
<ol>
<asp:PlaceHolder runat="server" ID="itemsGoHere"></asp:PlaceHolder>
</ol>
Затем для каждой записи привязанной к элементу ListView был бы обработан ItemTemplate. В результате вы получите следующую разметку:
<li>Scott Mitchell</li>
<li>Sam Smith</li>
<li>Jisun Lee</li>
<li>Andrew Fuller</li>
<li>Edgar Johnson</li>
<li>Ellen Plank</li>
<li>Tito Wald</li>
<li>Layla Clapton</li>
Обработанная разметка ItemTemplates будет расположена в соответствующих элементах управления GroupLayout PlaceHolder, и выглядит это следующим образом:
<p>
<ol>
<li>Scott Mitchell</li>
<li>Sam Smith</li>
<li>Jisun Lee</li>
</ol>
<ol>
<li>Andrew Fuller</li>
<li>Edgar Johnson</li>
<li>Ellen Plank</li>
</ol>
<ol>
<li>Tito Wald</li>
<li>Layla Clapton</li>
</ol>
</p>