Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Динамический DataGrid, ViewState и гарантированные тормоза
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток. Бьюсь с такой вот проблемой: есть DataGrid, структура которого задается динамически (чтобы использовать шаблоны колонок, пришлось бы писать 2 десятка страниц вместо одной). Эту структуру ASP.NET не умеет сохранять. А когда при перезагрузке страницы DG пуст, он не генерирует событий (и система не вызывает обрабочиков), даже если причиной отправки страницы на сервак было именно событие DG. В результате после postback'а получается полная хрень: - DG пуст, обработчики событий не вызываются - значит, нужно заполнять DG снова при обработке Page_Load, так? - НО ЕСЛИ СОБЫТИЯ, которые будут обрабатываться после Page_Load, ИЗМЕНЯЮТ СОДЕРЖИМОЕ DG ? Получается, что DG будет заполнен, перезаполнен и переперезаполнен столько раз, сколько произойдет событий, но как минимум 2 (Page_Load + <чего-то случилось на клиенте>) В итоге (несколько тысяч записей в гриде) страница тормозит, как проклятая! Че тут можно сделать, народ?! (Можно ли, например, узнать что-то о произшедших событиях еще в page_load()?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2006, 12:04 |
|
||
|
Динамический DataGrid, ViewState и гарантированные тормоза
|
|||
|---|---|---|---|
|
#18+
Вариантов два в, Вашем случае: Первый это кешировать стандартными средствами выборку на несколько тысяч записей из БД в объекте Cashe. Второй если Вы использеете именно DataGrid а не GridView из 2.0 - организовать постраничный вывод, когда в запросе выбираются данные только для требуемой для отображения страницы, впрочем и здесь есть выход в виде ObjectDataSource. Заполняйте Грид только если страница грузится в первый раз, в методе PageLoad проверте(isPostBack == false), в остальных вариантах вынесите его заполнение в отдельный метод, который и вызывайте в требуемомом обработчике события. С ув. Сергей. История - это огромная система раннего предупреждения. Norman Cousins ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2006, 16:04 |
|
||
|
Динамический DataGrid, ViewState и гарантированные тормоза
|
|||
|---|---|---|---|
|
#18+
Вариантов два в, Вашем случае: Первый это кешировать стандартными средствами выборку на несколько тысяч записей из БД в объекте Cashe. Второй если Вы использеете именно DataGrid а не GridView из 2.0 - организовать постраничный вывод, когда в запросе выбираются данные только для требуемой для отображения страницы, впрочем и здесь есть выход в виде ObjectDataSource. Заполняйте Грид только если страница грузится в первый раз, в методе PageLoad проверте(isPostBack == false), в остальных вариантах вынесите его заполнение в отдельный метод, который и вызывайте в требуемомом обработчике события. С ув. Сергей. Проблемы не те, о которых Вы пишете. 1. Данные кэшируются 2. IsPostBack, естественно, проверяется 3. Постраничный вывод закэшированных данных реализован Проблема в том, что связывать данные приходится многократно! - Задал структуру Grid'а, связал данные в событии Load (иначе обработка событий не вызовется) - в обработчике события, которое изменяет фильтр, снова вынужден связывать данные с DG и так во всех последовательно вызываемых обработчиках, если не при любом клике форма отправляется на сервак. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2006, 17:20 |
|
||
|
Динамический DataGrid, ViewState и гарантированные тормоза
|
|||
|---|---|---|---|
|
#18+
Делай связку только один раз в PreRender и все получится. Ну и динамическое создание грида лучше в Page_Init проводить на всяк пожарный. Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2006, 15:11 |
|
||
|
Динамический DataGrid, ViewState и гарантированные тормоза
|
|||
|---|---|---|---|
|
#18+
Делай связку только один раз в PreRender и все получится. Ну и динамическое создание грида лучше в Page_Init проводить на всяк пожарный. Я же сказал, если не сделать связку еще в Load, то событий не будет вообще. Я пробовал в LoadComplete. А PreRender выполняется еще позднее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2006, 14:51 |
|
||
|
Динамический DataGrid, ViewState и гарантированные тормоза
|
|||
|---|---|---|---|
|
#18+
Тебе достаточно создать датагрид при постбеке в Page_Init (но не биндить его) - все данные вытянутся из вьюстейта Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2006, 17:11 |
|
||
|
Динамический DataGrid, ViewState и гарантированные тормоза
|
|||
|---|---|---|---|
|
#18+
Тебе достаточно создать датагрид при постбеке в Page_Init (но не биндить его) - все данные вытянутся из вьюстейта Вот только стоило мне объявить Init, как из ViewState исчезли все значения.. Не понимаю! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2006, 19:29 |
|
||
|
Динамический DataGrid, ViewState и гарантированные тормоза
|
|||
|---|---|---|---|
|
#18+
Задача то у этого грида какая? Выводить одну дататаблю, но показывать разные колонки в зависимости от параметров? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2006, 19:54 |
|
||
|
Динамический DataGrid, ViewState и гарантированные тормоза
|
|||
|---|---|---|---|
|
#18+
Задача то у этого грида какая? Выводить одну дататаблю, но показывать разные колонки в зависимости от параметров? Вывод любой списочной инфы из БД. Видов таких списков сейчас - 10, позднее прибавится еще N штук:-). Для некоторых требуется еще и TreeView (структура списка - иерархическая), для некоторых - нет. Рисовать для каждого из них отдельную страницу как-то глупо. Различий в выводе практически нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2006, 20:11 |
|
||
|
Динамический DataGrid, ViewState и гарантированные тормоза
|
|||
|---|---|---|---|
|
#18+
У этих списков есть что то общее? Когда мне надо на одной странице вываливать разнородные данные, но хотя бы с одной общей колонкой, я использую релэйшены, т.е. в темплэйтфилде кладу нужный контрол с биндом датасурса к соответствующему релейшену. Если по релейшену нет строк, то остаеться пустое поле (если вся колонка пустая, то скрываю ее). Датасурс какого типа? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2006, 20:23 |
|
||
|
Динамический DataGrid, ViewState и гарантированные тормоза
|
|||
|---|---|---|---|
|
#18+
У этих списков есть что то общее? Когда мне надо на одной странице вываливать разнородные данные, но хотя бы с одной общей колонкой, я использую релэйшены, т.е. в темплэйтфилде кладу нужный контрол с биндом датасурса к соответствующему релейшену. Если по релейшену нет строк, то остаеться пустое поле (если вся колонка пустая, то скрываю ее). Датасурс какого типа? Ну, какая списочная инфа может храниться в БД организации и которая д.б. доступна сотрудникам в комантировках, чтобы составить внутренний документ? Да какая угодно - от контрагентов и договоров, до сотрудников, банк счетов и пр. Набор информации - разный и плохо предсказуемый, шаблон тут можно ну в самом крайнем случае юзать. Блин, должнобыть какое-то решение без извратов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2006, 20:52 |
|
||
|
Динамический DataGrid, ViewState и гарантированные тормоза
|
|||
|---|---|---|---|
|
#18+
В таком случае я бы на странице объявил нонтайпед дататэйбл и поставил его на датасурс грида. При событии page_load при отсутствии постбэка заливал его из первой таблицы датасета. Далее при смене таблицы, через функцию чистил и снова заливал в дататейбл необходимую таблицу. Таким образом дататейбл кэширует информацию. Ivan Plaxin ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2006, 21:10 |
|
||
|
Динамический DataGrid, ViewState и гарантированные тормоза
|
|||
|---|---|---|---|
|
#18+
В таком случае я бы на странице объявил нонтайпед дататэйбл и поставил его на датасурс грида. При событии page_load при отсутствии постбэка заливал его из первой таблицы датасета. Далее при смене таблицы, через функцию чистил и снова заливал в дататейбл необходимую таблицу. Таким образом дататейбл кэширует информацию. Вы топик с начала читали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2006, 21:21 |
|
||
|
Динамический DataGrid, ViewState и гарантированные тормоза
|
|||
|---|---|---|---|
|
#18+
В таком случае я бы на странице объявил нонтайпед дататэйбл и поставил его на датасурс грида. При событии page_load при отсутствии постбэка заливал его из первой таблицы датасета. Далее при смене таблицы, через функцию чистил и снова заливал в дататейбл необходимую таблицу. Таким образом дататейбл кэширует информацию. Вы топик с начала читали? Пардон, не понял со злости Не умею пользоваться этим объектом (у меня за плечами только короткий мануал:-)) Надо попробовать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2006, 21:24 |
|
||
|
Динамический DataGrid, ViewState и гарантированные тормоза
|
|||
|---|---|---|---|
|
#18+
Тебе достаточно создать датагрид при постбеке в Page_Init (но не биндить его) - все данные вытянутся из вьюстейта Сделал, как ты советовал. Неизвестно куда исчезнувшие (после написания Page_Init) значения в StateBag заменил на HiddenField'ы с включенным вьюстейтом. Работает, раза в три быстрее чем тот дурацкий вариант. Спасибо! Буду очень благода, если скажешь еще что-ндь про причину падения StateBag'а. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2006, 21:46 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=34004577&tid=1389314]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
| others: | 250ms |
| total: | 407ms |

| 0 / 0 |
