большой постраничный GridView, сводные данные и общие итоги с SQLdataSource

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

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

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

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

Так что мне интересно, есть ли изящный способ сделать это?


person philw    schedule 19.09.2010    source источник


Ответы (1)


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

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

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

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

person Sleeper Smith    schedule 15.08.2011
comment
Не так уж и много, просто я подумал, есть ли какой-нибудь изящный способ получить то, что легко поместить туда (итоговую сумму), чтобы я мог отобразить это в более полезном месте. Похоже, что нет. Я мог бы избавиться от этого с помощью jQuery, но это немного взломано. Трехуровневая архитектура? Я могу заниматься теорией, но это практика ;-) - person philw; 16.09.2011
comment
Я просто указываю, что это плохая практика. Ответ SO здесь очень хорошо выражает это. stackoverflow .com / questions / 6630291 /. ASPX достаточно известны, как и для модульных тестов. Добавление элемента управления sqldatasource - это просто оскорбление по сравнению с травмой, и это практика, которая редко используется в чем-либо серьезном. - person Sleeper Smith; 23.09.2011
comment
Возможно, я не совсем понял - я не прошу уроков или дискуссий по архитектуре программного обеспечения, как бы хорошо это ни было. - person philw; 29.10.2011