Подсчет суммы по группе

Обсуждение Stimulsoft Reports.NET
Ответить
prm
Сообщения: 7
Зарегистрирован: 07 дек 2009, 05:37

Подсчет суммы по группе

Сообщение prm »

Здравствуйте,

У меня версия 2007.2 Знаю, что старая и уже планирую возобновить подписку. Возможно, моя проблема решена в последующих версиях. Если - нет, подскажите как правильно построить отчет.

Отчет выводит данные, сгруппированные в двух уровнях. Существует 5 основных групп, по которым надо выводить итоговые суммы и супергруппа, которая должна вывести итоги по сумме первых трех групп. Данные выводятся с помощью кросс-данных, поскольку требуется еще группировка по времени, которая выполняется с помощью отдельного поля в запросе. Для подсчета сумм по группам первого уровня использую свой массив переменных и событие GetValueEvent. Сумма по супергруппе получается из отдельного источника данных.

Как оказалось, когда очередная строка не помещается целиком на странице по вертикали и она переносится на другую страницу, то GetValueEvent вызывается дважды и сумма расчитывается неправильно.

Подскажите, как правильно посчитать сумму по группе.

Спасибо.
Вложения
stimul1.png
stimul1.png (15.71 КБ) 1338 просмотров
Jan
Сообщения: 495
Зарегистрирован: 19 фев 2009, 11:14

Подсчет суммы по группе

Сообщение Jan »

Здравствуйте,

В версии 2007.2 используется EngineV1. Этот движок построения отчетов использует механизм состояний, чтобы обрабатывать такие ситуации как Вы описали. Вам необходимо будет переопределить два метода SaveState и RestoreState в коде отчета. Должно получиться вот так:

Код: Выделить всё

public class Отчет : Stimulsoft.Report.StiReport
    {
        
	public override void SaveState(string stateName)
	{
		base.SaveState(stateName);

                //Здесь сохраняем состояние переменных
	}

	public override void RestoreState(string stateName)
	{
		base.RestoreState(stateName);

                //Здесь востанавливаем состояние переменных
	}
	
        public Отчет()
        {
            this.InitializeComponent();
        }
Кроме этого нужно использовать событие Rendering у Databand или CrossDataBand'а вместо GetValueEvent.


Спасибо.
Ответить