Gridview в ASP.NET, конечно, есть способ лучше?

Asked
Viewd263

0

Они кажутся такими противными.

У меня есть сетка, и запрос, который она выполняет, возвращает 10 000 результатов, если фильтры не установлены ... и отображает 10 из них на первой странице.Вы нажимаете страницу 2, а затем он снова выполняет запрос ... и снова ...

А нельзя их кешировать?Нет ли более простого способа получить все результаты, а затем отфильтровать их в реальном времени без повторных запросов?Должен ли ASP.NET бороться с gridview?

Я хотел бы знать, есть ли способ получше ...

4 ответов

2

Если вы используете SQL Server 2005 и более поздние версии, вы можете использовать в своем запросе функцию ROW_NUMBER(), которую можно использовать для постраничного просмотра строк, возвращаемых в источнике.

У ScottGu есть подробное сообщение в блоге здесь используя DataList, но это в равной степени применимо к GridViews

Эта запись в блоге более краткаязнакомство с особенностями ROW_NUMBER()

  • Прекрасно, выглядит полезным и немного сложным, я потрачу некоторое время на изучение этого

    NibblyPig06 ноября 2009, 10:44
0

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

Вы можете поместить результаты в ViewState, но это не рекомендуется, если у вас есть много данных, которые можно вернуть.

  • Хм, если бы я получил обратно 10 000 результатов (хотя в основном это имя, номер телефона, адрес электронной почты), это вызвало бы проблему, даже если эти результаты будут отфильтрованы без обновления страницы или чего-то еще?

    NibblyPig06 ноября 2009, 10:05
  • Если каждый результат имеет размер 100 байт (возможно, больше) и у вас будет 10 000 таких строк в вашем состоянии просмотра, вы получите почти 1 МБ данных.ViewState закодирован, поэтому он не будет таким большим на самой странице, но вы хотите, чтобы ViewState был как можно меньше.

    Gerrie Schenck06 ноября 2009, 10:12
4

Какую сетку вы используете?GridViews будет привязываться ко всему, что реализует IEnumerable, так что понимаете ли вы, что можете получать данные и явно связывать их самостоятельно?Аналогично:

 List<myDataObjects> data = executeMyQuery();
gridview.DataSource = data;
gridView.DataBind();
 

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

0

Используйте повторитель и создавайте запросы, чтобы возвращать только те результаты, которые вам нужны.В вашем запросе, вероятно, потребуется использовать параметры для resultsPerPage и PageNumber.

Gridviews, подключенные к этим наборам данных, подходят для 5-минутных демонстраций, но на самом деле не должны попадать в рабочий код."Грязный" - подходящее слово для этого.

  • Мне нужен был способ полуавтоматической сортировки, нескольких страниц и т. д. Говоря "использовать повторитель", вы имеете в виду, в основном, вытаскивать мои результаты и отображать их на странице самостоятельно, используя мое собственное форматирование?

    NibblyPig06 ноября 2009, 10:04
  • Повторитель - это элемент управления, похожий на сетку, но вы сами определяете разметку.По сути, это прославленный цикл for с некоторыми встроенными событиями страницы. Если ваши данные являются табличными, то используйте сетку.К сожалению, вам все равно придется самостоятельно набирать много кода сортировки / подкачки.

    Paul06 ноября 2009, 10:06
  • Контроль не имеет значения.Важно только то, как вы вернете данные.Вы можете привязать повторитель к чему-то, что возвращает миллион строк, так же легко, как вы можете привязать GridView к чему-то, что возвращает миллион строк.Фактически, вы можете поступить так, как вы советуете (создавать запросы, возвращающие только те результаты, которые вам нужны), а затем привязать их к GridView.

    Jason Berkan06 ноября 2009, 14:42