CrossTab и Report.BeforePrint

отредактировано 02:32 Раздел: FastReport 3.0
Я рискнул перейти с old-style кросстабов с верт. бэндами, (так как те так и не захотели форматироваться по ширине) на новые. Кинул CrossTab на MasterData и решил заполнить его данными в Report.BeforePrint (не скриптовый обработчик - нормальный).
Report - двухпроходный. 1 cell, 1 column. 1 row. Без Sort, Total и SubTotal.Только в Cell заносится строка с #13#10 - т.е. печатается в две строки. Наделал AddValue. И начал получать странные результаты. Таблица 25x8 рендерилась в два прохода около 30!!! сек на Athlon 2500. Строка в Cell размножилась и вывелась половина верхней, половина нижней. Как выяснилось - у CellMemo по умолчанию VAlign= vaCenter. (Неплохо бы иметь настройку в Дизайнере). Ну да ладно. Сделал =vaTop. Резаться строки перестали, зато при детальном осмотре CellMemo.Count=33 !! О как !
При дальнейших исследованиях выяснилось, что Report.BeforePrint вызывается не на каждый проход, как можно было предположить, а неск. десятков раз!
И естественно, каждый раз AddValue почему-то суммировало значения. Для строк - добавляя #13#10. Странная логика.
Попробовал сделать заливку данных отдельно - вне BeforePrint - CrossTab вообще печататься не стал. Поставил флаги - только один раз на первый проход, один - на второй, но и так не вышло - оно по разику проходит то первый, то второй.
А теперь - вопрос :
Как бы залить данные всего раз и не мучаться?

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.