Для того чтобы заполучить в свое распоряжение разбивку на страницы (
Paging ) в
ListView необходимо использовать контрол
DataPager.
DataPager может быть расподожен как пределах ListView в LayoutTemplate так и за пределами
ListView . Но тогда для
DataPager необходимо установить свойство
PagedControlID которое будет указывать на наш
ListView. Ниже два примера использования.
Внутри ListView
<asp:ListView ID="ListView1" runat="server">
<LayoutTemplate>
<ul>
<asp:PlaceHolder runat="server" ID="itemPlaceholder" />
</ul>
<asp:DataPager ID="Pager1" runat="server" PageSize="40">
<Fields>
<asp:NumericPagerField />
</Fields>
</asp:DataPager>
</LayoutTemplate>
<ItemTemplate>
<li>
<asp:Literal ID="litContent" runat="server"/>
</li>
</ItemTemplate>
</asp:ListView>
За Пределами ListView
<asp:ListView ID="ListView1" runat="server">
<LayoutTemplate>
<ul>
<asp:PlaceHolder runat="server" ID="itemPlaceholder" />
</ul>
</LayoutTemplate>
<ItemTemplate>
<li>
<asp:Literal ID="litContent" runat="server"/>
</li>
</ItemTemplate>
</asp:ListView>
<asp:DataPager ID="Pager1" PagedControlID="ListView1" runat="server" PageSize="40">
<Fields>
<asp:NumericPagerField />
</Fields>
</asp:DataPager>
Я предпочитаю использовать
DataPager за пределами
ListView. Все нижеописаноое будет относиться к этому варианту использования.
Итак дальше... Предоложим у нас имеется некая поисковая форма и кнопка "Искать". Пользователь вводит данные в форму и нажимает кнопку. По нажатию происходит выборка данных и наполнение
ListView.
А теперь ситуация... Допустим по условиям выборки в
ListView попадает 100 строк. Наш пейджинг ( с установкой в 40 записей ) разобьет все это дело на три страницы. Пользователь переходит на третью страницу, вводит новые параметры для поиска и опять нажимает "Искать". Теперь наша выборка содержит только 10 строк. Производим наполение
ListView и видим только форму поиска и пейджинг - а самого
ListView нет, хотя мы точно знаем, что данными он был наполнен.
Причина в том
DataPager не был обнулен. Тоесть он по пережднему показывает на третью страницу, но ее уже нет. Вот и возникат конфликт.
Для решения этой проблемы , в нашем случае, в обработчике щелчка кноки нужно вызвать метод
SetPageProperties нашего датапейджера.
Pager1.SetPageProperties(0, 40, True)
где первый параметр - стартовый индекс (индекмирование с 0), а второй - количество строк на странице.
Все. Теперь после каждого щелчка по кнопке "Искать" пользователь будет оказываться на первой странице нашего
ListView, отображающего результаты поиска.