Стандартные сетки не являются хорошим решением
поскольку они не дают возможности группировки
Если вы хотите создать свой собственный, я могу дать вам несколько советов. Во-первых, вы, возможно, могли бы создать группы с операторами ROLLUP или COMPUTE или аналогичными в вашем SQL и использовать сетку.
Я пошел по следующему пути: отчеты основаны на данных, поэтому я знаю, какие столбцы можно сгруппировать, а какие нужно вычислить итоговые значения. Я использую стандартную DataGrid, и в событии ItemDataBound я сохраняю промежуточную сумму для всех столбцов, которые в ней нуждаются, а затем обнаружив изменения в столбце группы. При обнаружении я вставляю итоги группы, сбрасываю промежуточные итоги и вставляю новый заголовок группы.
Я сделал быстрый прототип этого за день. Но к тому времени, когда вы проработаете все мелкие детали, чтобы предоставить отчетам все функции, которые им нужны, и чтобы они выглядели правильно, вы потратите немало времени и в конечном итоге получите небольшой набор кода.