Улучшения нумерации страниц в сетках ASP.NET 2.0 - PullRequest
1 голос
/ 22 декабря 2010

В настоящее время у меня есть сетка данных, привязанная к таблице с десятками тысяч записей.Я отображаю сетку данных, используя существующий asp.net 2.0.Я показываю десять записей одновременно.

Моя проблема заключается в том, что всякий раз, когда я пытаюсь получить доступ к следующей странице, я снова получаю все записи из базы данных и затем отображаю те, которые требуются.Это замедляет приложение.Есть ли в .net 2.0 функция, которая поможет мне оптимизировать эту проблему?Я не могу использовать сторонние элементы управления или AJAX.

ОБНОВЛЕНИЕ Я также не могу использовать SQL для получения 10 записей одновременно.Не изменяя существующую бизнес-логику или поиск данных, я хочу сделать это.

Ответы [ 3 ]

5 голосов
/ 22 декабря 2010

Вы можете выполнять разбиение на страницы в своем SQL и / или хранимой процедуре.

По сути, вы передаете sproc количество элементов на странице и на какой странице вы находитесь.Например, на странице 3 и 20 записей на странице.

Если вы можете использовать SQL Server 2005 или более позднюю версию, вы можете использовать более новые ключевые слова, которые упростят запрос.

Вот простая версия такого запроса:

SELECT ClientName, RowNumber
FROM (SELECT ClientName, ROW_NUMBER() OVER (ORDER BY ClientName) AS RowNumber
FROM Clients) AS cl
WHERE RowNumber BETWEEN 12 AND 30

Значения выше "12" и "30" будут входными параметрами.

ЭтоКстати, вы возвращаете только те строки, которые собираетесь отображать.

1 голос
/ 22 декабря 2010

Вы можете вставить свой источник данных в сеанс.

, затем проверить, не равен ли ваш источник данных в сеансе, и затем получить его.

Таким образом, вы получите данные только один раз иесли вам нужно получить свежие данные (скажем, потому что вы что-то обновили), просто очистите переменную сеанса, которая содержит ваш источник данных.

РЕДАКТИРОВАТЬ:

вот половина попыткиНапример, (под этим я подразумеваю, что я не собираюсь менять страницу, потому что я предполагаю, что вы уже знаете, как это сделать)

protected void PageChanging(object sender, GridViewPageEventArgs e)
{
  if(Session["YourSessionVariableForData"] == null)
    Session["YourSessionVariableForData"] = YourDataCall();
  YourGridView.PageIndex = e.NewPageIndex;
  YourGridView.DataSource = ((YourDataType)Session["YourSessionVariableForData"]);
  YourGridView.DataBind();
}
0 голосов
/ 22 декабря 2010

Пейджинг в хранимой процедуре.Посмотрите на использование функции ROW_NUMBER () для этого.Создайте класс, который будет вызывать хранимую процедуру, и подключите ее к сетке, используя ObjectDataSource.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...