Как работает SqlDataSource, если команда select назначается из кода?

Я привязываю представление сетки с помощью SqlDataSource и назначаю команду выбора SQL из кода позади SqlDataSource . Я также включил разбиение на страницы в моем GridView с размером страницы 25.

Теперь я хочу знать, если я назначаю запрос из кода позади, тогда SqlDataSource позаботится о разбивке на страницы. Я имею в виду, что он должен извлекать 25 записей за раз на основе выбранного номера страницы.

Я обеспокоен тем, что мой GridView показывает данные слишком медленно, и я чувствую, что SqlDataSource извлекает все 9174 записи (набор результатов моего запроса) и отображает первые 25 из них на первой странице. Когда я переключаюсь на вторую страницу, похоже, что она снова извлекает все 9174 записи и показывает следующие 25 записей.

Может ли кто-нибудь помочь мне понять, правильно ли то, что я предполагаю, или поток в моем случае отличается.


person Nikhil Gaur    schedule 03.02.2014    source источник


Ответы (2)


да вы правы. Он получает все записи, а затем получает 25 записей для указанного индекса страницы. Если вы чувствуете, что это неэффективно, вам придется сделать это вручную. Сначала получите количество записей (в вашем случае 9174), затем 9174/25 - это количество страниц. при загрузке сетки получить только первые 25 записей и отобразить их в сетке. Также вручную добавьте кнопки «Далее» и «Назад» для навигации. В соответствии с текущей страницей (скажем, 6), если щелкнуть следующую страницу (хотите получить 7-страничные данные 151 записи до 175 записей), затем получите эти 25 записей и привяжите их при следующем нажатии кнопки. Таким образом, вам придется сделать это вручную, сохранив текущий номер страницы.

person Thilipan Croose    schedule 03.02.2014

Если вы делаете это, устанавливайте источник данных в событии Selecting:

protected void MyDataSourceSelecting(object sender, LinqDataSourceSelectEventArgs e)
{
    e.Result = SomeIqueryableValue;
}

Затем сетка будет автоматически обрабатывать пейджинг, используя отложенное выполнение IQueryable.

person Thomas Koelle    schedule 03.02.2014