Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Динамический DataGrid, ViewState и гарантированные тормоза / 15 сообщений из 15, страница 1 из 1
16.09.2006, 12:04
    #33991804
Evgenius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический DataGrid, ViewState и гарантированные тормоза
Доброго времени суток. Бьюсь с такой вот проблемой:
есть DataGrid, структура которого задается динамически (чтобы использовать шаблоны колонок, пришлось бы писать 2 десятка страниц вместо одной). Эту структуру ASP.NET не умеет сохранять. А когда при перезагрузке страницы DG пуст, он не генерирует событий (и система не вызывает обрабочиков), даже если причиной отправки страницы на сервак было именно событие DG.
В результате после postback'а получается полная хрень:
- DG пуст, обработчики событий не вызываются
- значит, нужно заполнять DG снова при обработке Page_Load, так?
- НО ЕСЛИ СОБЫТИЯ, которые будут обрабатываться после Page_Load, ИЗМЕНЯЮТ СОДЕРЖИМОЕ DG ?
Получается, что DG будет заполнен, перезаполнен и переперезаполнен столько раз, сколько произойдет событий, но как минимум 2 (Page_Load + <чего-то случилось на клиенте>)
В итоге (несколько тысяч записей в гриде) страница тормозит, как проклятая!
Че тут можно сделать, народ?!
(Можно ли, например, узнать что-то о произшедших событиях еще в page_load()?)
...
Рейтинг: 0 / 0
16.09.2006, 16:04
    #33991933
Juice
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический DataGrid, ViewState и гарантированные тормоза
Вариантов два в, Вашем случае:
Первый это кешировать стандартными средствами выборку на несколько тысяч записей из БД в объекте Cashe.
Второй если Вы использеете именно DataGrid а не GridView из 2.0 - организовать постраничный вывод, когда в запросе выбираются данные только для требуемой для отображения страницы, впрочем и здесь есть выход в виде ObjectDataSource. Заполняйте Грид только если страница грузится в первый раз, в методе PageLoad проверте(isPostBack == false), в остальных вариантах вынесите его заполнение в отдельный метод, который и вызывайте в требуемомом обработчике события.
С ув. Сергей.
История - это огромная система раннего предупреждения.
Norman Cousins
...
Рейтинг: 0 / 0
16.09.2006, 17:20
    #33991971
Evgenius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический DataGrid, ViewState и гарантированные тормоза
Вариантов два в, Вашем случае:
Первый это кешировать стандартными средствами выборку на несколько тысяч записей из БД в объекте Cashe.
Второй если Вы использеете именно DataGrid а не GridView из 2.0 - организовать постраничный вывод, когда в запросе выбираются данные только для требуемой для отображения страницы, впрочем и здесь есть выход в виде ObjectDataSource. Заполняйте Грид только если страница грузится в первый раз, в методе PageLoad проверте(isPostBack == false), в остальных вариантах вынесите его заполнение в отдельный метод, который и вызывайте в требуемомом обработчике события.
С ув. Сергей.

Проблемы не те, о которых Вы пишете.
1. Данные кэшируются
2. IsPostBack, естественно, проверяется
3. Постраничный вывод закэшированных данных реализован
Проблема в том, что связывать данные приходится многократно!
- Задал структуру Grid'а, связал данные в событии Load (иначе обработка событий не вызовется)
- в обработчике события, которое изменяет фильтр, снова вынужден связывать данные с DG и так во всех последовательно вызываемых обработчиках, если не при любом клике форма отправляется на сервак.
...
Рейтинг: 0 / 0
17.09.2006, 15:11
    #33992553
Dimon aka Manowar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический DataGrid, ViewState и гарантированные тормоза
Делай связку только один раз в PreRender и все получится.
Ну и динамическое создание грида лучше в Page_Init проводить на всяк пожарный.

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
...
Рейтинг: 0 / 0
19.09.2006, 14:51
    #33996969
Evgenius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический DataGrid, ViewState и гарантированные тормоза
Делай связку только один раз в PreRender и все получится.
Ну и динамическое создание грида лучше в Page_Init проводить на всяк пожарный.

Я же сказал, если не сделать связку еще в Load, то событий не будет вообще.
Я пробовал в LoadComplete. А PreRender выполняется еще позднее
...
Рейтинг: 0 / 0
19.09.2006, 17:11
    #33997543
Dimon aka Manowar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический DataGrid, ViewState и гарантированные тормоза
Тебе достаточно создать датагрид при постбеке в Page_Init (но не биндить его) - все данные вытянутся из вьюстейта

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
...
Рейтинг: 0 / 0
21.09.2006, 19:29
    #34004413
Evgenius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический DataGrid, ViewState и гарантированные тормоза
Тебе достаточно создать датагрид при постбеке в Page_Init (но не биндить его) - все данные вытянутся из вьюстейта

Вот только стоило мне объявить Init, как из ViewState исчезли все значения..
Не понимаю!
...
Рейтинг: 0 / 0
21.09.2006, 19:54
    #34004450
plaxinia
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический DataGrid, ViewState и гарантированные тормоза
Задача то у этого грида какая? Выводить одну дататаблю, но показывать разные колонки в зависимости от параметров?
...
Рейтинг: 0 / 0
21.09.2006, 20:11
    #34004475
Evgenius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический DataGrid, ViewState и гарантированные тормоза
Задача то у этого грида какая? Выводить одну дататаблю, но показывать разные колонки в зависимости от параметров?

Вывод любой списочной инфы из БД. Видов таких списков сейчас - 10, позднее прибавится еще N штук:-). Для некоторых требуется еще и TreeView (структура списка - иерархическая), для некоторых - нет.
Рисовать для каждого из них отдельную страницу как-то глупо. Различий в выводе практически нет.
...
Рейтинг: 0 / 0
21.09.2006, 20:23
    #34004497
Iplax
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический DataGrid, ViewState и гарантированные тормоза
У этих списков есть что то общее?
Когда мне надо на одной странице вываливать разнородные данные, но хотя бы с одной общей колонкой, я использую релэйшены, т.е. в темплэйтфилде кладу нужный контрол с биндом датасурса к соответствующему релейшену. Если по релейшену нет строк, то остаеться пустое поле (если вся колонка пустая, то скрываю ее).

Датасурс какого типа?
...
Рейтинг: 0 / 0
21.09.2006, 20:52
    #34004541
Evgenius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический DataGrid, ViewState и гарантированные тормоза
У этих списков есть что то общее?
Когда мне надо на одной странице вываливать разнородные данные, но хотя бы с одной общей колонкой, я использую релэйшены, т.е. в темплэйтфилде кладу нужный контрол с биндом датасурса к соответствующему релейшену. Если по релейшену нет строк, то остаеться пустое поле (если вся колонка пустая, то скрываю ее).

Датасурс какого типа?
Ну, какая списочная инфа может храниться в БД организации и которая д.б. доступна сотрудникам в комантировках, чтобы составить внутренний документ? Да какая угодно - от контрагентов и договоров, до сотрудников, банк счетов и пр.
Набор информации - разный и плохо предсказуемый, шаблон тут можно ну в самом крайнем случае юзать.
Блин, должнобыть какое-то решение без извратов
...
Рейтинг: 0 / 0
21.09.2006, 21:10
    #34004567
plaxinia
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический DataGrid, ViewState и гарантированные тормоза
В таком случае я бы на странице объявил нонтайпед дататэйбл и поставил его на датасурс грида. При событии page_load при отсутствии постбэка заливал его из первой таблицы датасета. Далее при смене таблицы, через функцию чистил и снова заливал в дататейбл необходимую таблицу. Таким образом дататейбл кэширует информацию.  Ivan Plaxin
...
Рейтинг: 0 / 0
21.09.2006, 21:21
    #34004577
Evgenius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический DataGrid, ViewState и гарантированные тормоза
В таком случае я бы на странице объявил нонтайпед дататэйбл и поставил его на датасурс грида. При событии page_load при отсутствии постбэка заливал его из первой таблицы датасета. Далее при смене таблицы, через функцию чистил и снова заливал в дататейбл необходимую таблицу. Таким образом дататейбл кэширует информацию.

Вы топик с начала читали?
...
Рейтинг: 0 / 0
21.09.2006, 21:24
    #34004581
Evgenius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический DataGrid, ViewState и гарантированные тормоза
В таком случае я бы на странице объявил нонтайпед дататэйбл и поставил его на датасурс грида. При событии page_load при отсутствии постбэка заливал его из первой таблицы датасета. Далее при смене таблицы, через функцию чистил и снова заливал в дататейбл необходимую таблицу. Таким образом дататейбл кэширует информацию.

Вы топик с начала читали?
Пардон, не понял со злости

Не умею пользоваться этим объектом (у меня за плечами только короткий мануал:-)) Надо попробовать
...
Рейтинг: 0 / 0
22.09.2006, 21:46
    #34007421
Evgenius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический DataGrid, ViewState и гарантированные тормоза
Тебе достаточно создать датагрид при постбеке в Page_Init (но не биндить его) - все данные вытянутся из вьюстейта

Сделал, как ты советовал. Неизвестно куда исчезнувшие (после написания Page_Init) значения в StateBag заменил на HiddenField'ы с включенным вьюстейтом. Работает, раза в три быстрее чем тот дурацкий вариант.
Спасибо!
Буду очень благода, если скажешь еще что-ндь про причину падения StateBag'а.
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Динамический DataGrid, ViewState и гарантированные тормоза / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]