У меня есть экран поиска .aspx, который отображает результаты поиска в компоненте asp: GridView.По результатам поиска может быть возвращено до 1000 записей.Я хочу реализовать разбиение на страницы в сетке, чтобы одновременно отображалось только 15 записей, и пользователь мог просматривать результаты.
Я извлекаю записи, передавая параметры поиска службе WCF, которая возвращаетСписок конкретных объектов.Я создаю Datatable и вставляю по одному DataRow на объект объекта из Списка.Затем я связываю представление сетки с таблицей данных.
Вот как определяется моя сетка на странице .aspx:
<asp:GridView ID="gridCat" runat="server" AutoGenerateColumns="False" DataKeyNames="CatalogueID"
HeaderStyle-CssClass="fieldHeading" RowStyle-CssClass="fieldContent"
AlternatingRowStyle-CssClass="alternateFieldContent" Width="100%"
AllowPaging="True" AllowSorting="True" AutoGenerateDeleteButton="True"
PageSize="15">
, и у меня также есть этот метод в коде ((.файл aspx.vb):
Sub GridPagingAction(ByVal sender As Object, ByVal e As GridViewPageEventArgs) Handles gridCat.PageIndexChanging
gridCat.PageIndex = e.NewPageIndex
gridCat.DataBind()
gridCat.Visible = True
End Sub
Моя проблема заключается в следующем: первая страница отображается правильно, т.е. первые 15 записей отображаются правильно.Однако, когда я перехожу на страницу 2 в сетке, метод GridPagingAction запускается на сервере, но в сетке ничего не отображается - он просто пуст.
Я думаю, что причина этого заключается в том, что Datatableбольше не существует на сервере, когда запрос на вторую страницу попадает на сервер - это правильно?А asp: GridView при рендеринге первой страницы результатов берет только первые 15 записей из Datatble и отправляет их обратно в браузер.Поэтому, когда запрос на вторую страницу поступает в другие записи (т.е. записи 16 - 1000) нигде не существует - все ли это правильно?
Если да, то какое решение лучше - я не вижукак реализовать пейджинг без необходимости выполнения одного из следующих действий:
- повторный поиск каждый раз, когда пользователь использует опцию пейджинга;
- сохранение результатов поиска в сеансе послепервый Поиск извлекает их каждый раз, когда пользователь использует опцию подкачки;
- вручную вставляет результаты поиска в ViewState и извлекает их каждый раз, когда пользователь использует опцию подкачки.
Есть лилучший способ сделать это (или я делаю это неправильно)?Если нет, какой из 3 вариантов вы считаете лучшим?Я склоняюсь к варианту 2, так как не считаю вариант 1 работоспособным и не хочу отправлять множество ненужных данных обратно в браузер согласно варианту 3.