2012-04-30 1 views
0

Я заполняю GridView кодом, устанавливая источник данных для набора данных, возвращаемого запросом. Поэтому, по-видимому, сортировка и подкачка не просто работают магически, как если бы я использовал datasourceid = some sqldatasource.сортировка сетки: нужно перечитывать каждый раз?

Я нашел несколько примеров того, как это сделать в Интернете, но все они кажутся повторным выполнением запроса каждый раз. Не следует ли сохранить содержимое запроса в состоянии представления? Есть ли способ получить предыдущие результаты запроса и повторно сортировать, не возвращаясь в базу данных? (Является ли это сохранение всех данных в состоянии представления? Если да, почему я не могу это получить? Кажется довольно глупым отправить все это в браузер пользователя и отправить все обратно, тратя всю полосу пропускания, если нет способ добраться до него.)

Кроме того, если я пытаюсь разрешить пейджинг, мне кажется, что я снова должен повторно выполнять запрос каждый раз, когда пользователь переходит на другую страницу. И если пользователь сортирует, а затем страницы, то я должен помнить, что порядок сортировки был в скрытом поле или какой-то такой, поэтому я могу перечитать данные, повторно сортировать, а затем перейти на нужную страницу.

Учитывая, что, когда вы используете элемент управления источником данных, все это поведение встроено, я думаю, что здесь что-то отсутствует. Но, учитывая все примеры, которые делают это медленным, трудным способом, если я что-то пропущу, многие другие программисты тоже этого не замечают.

ответ

1

Если вы используете элемент управления GridView ASP.NET каждый раз, когда сортируете столбец или страницу через набор данных, вы делаете обратную передачу сервера. Сортировка и пейджинг с помощью этого конкретного элемента управления никогда не срабатывали «волшебным образом» и уже давно являются моим жуком.

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

Если возможно, я предлагаю забыть ASP.NET GridView и посмотреть на решение на стороне клиента, такое как jQuery jqGrid. Он использует вызовы AJAX для сортировки и страницы и намного, намного быстрее и меньше от головной боли. Единственный недостаток - это кривая обучения, но поверьте мне, что это стоит того, в конечном счете.

+0

Посредством «sorked magically» Я имел в виду, что если вы используете элемент управления источником данных, вам не нужно писать какой-либо код для реализации подкачки или сортировки. – Jay

+0

Да, я знаю, как использовать данные сеанса, но мне действительно не нравится идея чего-то вроде этого: нет надежного способа сбросить данные, когда это не долго r, и поэтому он заканчивается навсегда, и вы сталкиваетесь с проблемами, если пользователь может одновременно открыть два экземпляра экрана. Сохранение в viewstate возможно, но удваивает пропускную способность. Время для чтения данных, возвращающихся по проводам, было бы больше, чем требовалось бы, чтобы требовать базу данных во многих, возможно, в большинстве случаев. Так что уверен, что он умеет, но это некрасиво. – Jay

+0

OK Я вижу, что вы говорите ... лично я ненавижу использование элементов управления источниками данных, потому что он абстрагирует слишком много того, что происходит под капотом, но это экономит много времени.ViewState не идеальна, сеанс - это, вероятно, путь, если вы можете потратить некоторое время на то, чтобы сделать данные более надежными. – markp3rry

0

Да, gridview повторно выполняет запрос каждый раз.

Если запрос занимает слишком много времени, вы можете вручную хранить данные в сеансе или ViewState. И в Алгоритме, который заполняет сетку, просто читать их непосредственно для нее, вместо того, чтобы запускать запрос.

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

if (!Page.IsPostBack){ 
    //Run the query and save it to the session 
} 

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