большой постраничный GridView, накопительный и общий итоги с SQLdataSource - PullRequest
2 голосов
/ 19 сентября 2010

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

Мне нужна строка итоговой суммы, содержимое которой я отображаю за пределами gridview.

  • Я знаю, что могу получить это путемперехватывать событие RowBound в IIS и суммировать все строки, которые я вижу, но это кажется сложным и пешеходным.
  • Я знаю, что могу вручную сделать SQLdataSource.Select на своем SQLdataSource (он кэшируется), чтобы извлечь из него DataTable, а затем использовать DataTable.Compute для суммирования столбцов, но это выглядит немного взломанным, и яЯ не уверен, насколько эффективно два "выбора" действительно даже с кэшированием.

Мой предпочтительный подход заключается в том, чтобы заставить SQLserver выполнять грубую работу, используя Group By Rollup, который дает мне последнюю строкурезультата набора с итогами, которые я хочу в нем.Проблема в том, что в моем GridView есть строка итогов, которая мне не нужна, поскольку мне нужно поместить итоги в другое место (нет смысла размещать их на последней странице, где их можно отсортировать и разбить на страницы).Я думаю, я мог бы снова перехватить связанные с строкой события и сделать эту итоговую строку невидимой, но это немного взломало и может запутать подкачку.

Так что мне интересно, есть ли хороший способ сделать это?

1 Ответ

0 голосов
/ 15 августа 2011

Когда вы имеете в виду большой набор данных, я предполагаю миллион плюс?

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

Или может иметь общую информацию о таймере с истекшим временем.Если данные достаточно велики и нестабильны, иногда вам нужно учитывать деловую ценность наличия точного общего количества обновлений.Обычно в этом нет никакой ценности для бизнеса.Достаточно близкое значение, полученное несколько секунд назад, вполне подойдет.

Что касается контроля SqlDataSource, лично я его ненавижу.Что случилось с уровнями презентации / логики / данных?! ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...