EhLib 5 - куда вешать SumList.RecalcAll в связке master-detail ?

Игорь Ч
Дата: 26.04.2011 21:53:17
Имеется два DataSet-a связанных между собой через master-detail. На оба DataSet-a имеются DBGridEh. В DBGridEh2 в футере считается сумма колонки.
На какое событие DataSet2, DataSource2 или DBGridEh2 можно повесить DBGridEh2.SumList.RecalcAll, чтобы выполнить перерасчет суммы?
В силу некоторых обстоятельств события DataSet1 и DBGridEh1 трогать не хочется.
Игорь Ч
Дата: 27.04.2011 08:23:37
Вопрос актуален. Подобные ситуации уже здесь рассматривались, но все они сводились к событию на AfterScroll мастера, а мне нужно событие на детайле.
Вроде-бы есть OnRecordsetChangeCmplete - но на нем SumList.RecalcAll ругается, что объект закрыт... прям хоть таймер вешай.
Johnmen
Дата: 27.04.2011 09:14:58
Игорь Ч,

Сначала надо понять, в связи с чем и когда возникает потребность в рекалке. Причины?
Игорь Ч
Дата: 27.04.2011 10:13:50
Пересчитать результирующую сумму в футере грида детализации.
Johnmen
Дата: 27.04.2011 11:44:50
Игорь Ч
Пересчитать результирующую сумму в футере грида детализации.

Ещё раз для тугих - в связи с чем и когда возникает потребность в рекалке?
Игорь Ч
Дата: 27.04.2011 11:53:03
Забавно... ну может быть Вы тоже конкретизируете свой вопрос? Что значит "всвязи с чем"? В связи с желанием пользователя видеть сумму значений колонки. А может быть в связи с желанием программера заработать на излишней показухе.
Johnmen
Дата: 27.04.2011 11:57:41
Игорь Ч,

Вопрос, очевидно, относится не к юзеру, а к программе.
В связи с чем и когда у программы возникает потребность в рекалке?
mvb
Дата: 27.04.2011 12:03:19
Игорь Ч, может быть на AfterOpen второго датасета? А вообще пересчет этот грид делаем автоматом, зачем вы писАли свой Recalc?
Игорь Ч
Дата: 27.04.2011 13:02:17
mvb
событие AfterOpen не возникает на датасете детайла при использовании схемы мастер-детайл.

Johnmen
при перемещении по мастеру изменяется набор записей в детайле - так?
при изменении набора записей детайла, логично предположить, что сумма значений поля так-же изменится - так?
необходимо показать эту сумму в футере - так?
SumList.Activate включен - так? но при этом значение суммы в футере остается неизменным - тоже так.
Единственное решение - вызвать SumList.RecalcAll, который принудительно пересчитает футер.
Единственная проблемма при решении - найти событие, которое вызывается в детальной таблице или гриде после обновления рекордсета.
Johnmen
Дата: 27.04.2011 13:20:11
Игорь Ч,

Наиболее правильный ответ - AfterScroll мастера, как бы это вам ни нравилось...