Неизвестным кол-во колонок и длинные тексты в них

отредактировано 08:40 Раздел: FastReport 3.0
Как вывести в отчет таблицу с неизвестным количеством полей и, возможно, с очень длинными текстами в полях? Я нашла способ, но он не совсем устраивает.
Сначала пыталась использовать TfrxCrossView. Неуместившиеся колонки переносятся на другую страницу, но с большими текстами проблема. Если текст в поле состоит из большого количества не очень длинных строк, так что такая запись по высоте не помещается на странице отчета, то все отрисовывается очень странно: печатаются полупустые страницы, содержимое колонок выводится не под заголовками этих колонок, что-то накладывается на другое. Если же текст в поле - это одна очень длинная строка, то вообще при построении отчета выдается Access Violation. Можно ли со всем этим как-то бороться?
Мне удалось получить отчет следующим способом. В режиме run-time создать страницу, на нее поместить TfrxMasterData, а на него TfrxMemoView, соответствующие полям таблицы. Для полей, которые не умещаются на этой странице, таким же образом создается новая страница, куда помещается TfrxMasterData, а на него другие TfrxMemoView, и т.д. Чтобы бэнды TfrxMasterData на всех страницах для одной записи растягивались одинаково, приходится еще помещать на каждую страницу все остальные поля, но делать их невидимыми (делать шрифт белым).
А еще нужно, чтобы выводились сначала страница с уместившимися колонками, затем страницы с теми же записями с неуместившимися колонками, затем аналогично страницы со следующими записями. Но при моем способе так, видимо, не получится.
Можно ли каким-то образом все это сделать?

Комментарии

  • отредактировано 08:40
    >Если текст в поле состоит из большого количества не очень длинных строк, так что такая запись по высоте не помещается на странице отчета

    Cross такие ячейки не может рисовать в принципе. Надо использовать старые кросс-бэнды и выставлять флаг "Разрываемый" у дата-бэнда. См. пример отчета в демке demos\main, "Old-style crosstab"
  • отредактировано 08:40
    Сделала все как в этом примере, только у memo-поля выставляю StretchMode=smMaxHeight, у горизонтального дата-бэнда Stretched=True, AllowSplit=True и пытаюсь вывести тексты, которые по высоте не помещаются на страницу. Все работает так, как будто выставлено AllowSplit=False, т.е. печатает то, что поместилось на одной странице, а на следующей странице печатает уже следующую запись. Если я правильно поняла, в исходниках за это отвечает строка FVMasterBand.AllowSplit := False в frxEngine.pas в procedure TfrxEngine.ShowVBands(HBand: TfrxBand); Если ее убрать, то эта проблема устраняется, правда, правильно работает только если все колонки по ширине помещаются на одном листе. Если же они не помещаюстся, то лишние колонки не переносятся на другой лист, а начинают печататься опять на первом поверх уже напечатанных. Как же все-таки сделать так, как надо?

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

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