Как вручную заполнить Frxuserdataset?

отредактировано 13:00 Раздел: FastReport 4.0
Здравствуйте.

В моей программе предусмотрена печать нескольких видов отчётов. Информация для отчётов берётся из файлов. Информация считывается из файла в массив структур (например). Соответственно, сколько файолв с данными, столько и соответствующих массивов. (Пока их 4.)
В зависимости от требуемого отчёта в frxReport подгружается соответствующий шаблон (*.fr3).

А дальше возникает вопрос. Если б отчёт был всего один, можно было бы в шаблон в MasterData поместить несколько Memo со значениями-переменными типа [Date], [Name], и пр. А в методе frxReport.OnGetValue присваивать требуемым переменными необходимые значения.
Но у меня несколько шаблонов отчётов. Какой из них будет подан на печать - зависит от самих данных (например, все отчёты с именем Иван печатаются по шаблону №1, с именем Пётр - по шаблону №2, и т.д.) Поэтому в этом случае в обработчике frxReport.OnGetValue я не могу задать значения для всех переменных отчёта.

И у меня возникла мысль - если б можно было до печати заполнить frxUserDataSet (для каждого Master Data или Detail Data) моими данными из файлов, то потом FastReport сам брал бы данные из этого frxUserDataSet и вставлял в отчёт.

Но я никак не могу понять, как можно заполнить frxUserDataSet своими данными.
Или может, есть уже другое, более подходящее решение моего вопроса?

Спасибо.

Комментарии

  • отредактировано 13:00
    На случай, если я объяснил непонятно, скажу по-другому.
    Мне нужно организовать возможность печати четырёх разных отчётов. Шаблоны, разумеется, хранятся в файлах. В каждом шаблоне по одному MasterBand. Ещё есть и другие переменные, которые находятся в заголовке, например, но с ними я уже разобрался.
    В MasterBand первого отчёта имеется 3 Memo со значениями: [Date], [Time], [Text]. Соответственно, при печати в событии OnGetValue компонента frxReport эти переменные должны заполняться.

    На форме имею 4 кнопки - по одной на функцию печать отчёта N.
    Хочу сделать следующее: по щелчку по кнопке 1 датасет frxUserDataSet заполняется тремя полями (Fields:TStringList), а затем в него добавляются значения, как в таблицу. И frxReport берёт значения из него автоматически и подставляет их в поля переменных.
    Можно ли так сделать?
  • Stalker4Stalker4 123
    отредактировано 13:00
    vober написал: »
    Но я никак не могу понять, как можно заполнить frxUserDataSet своими данными.
    Или может, есть уже другое, более подходящее решение моего вопроса?

    Спасибо.
    frxUserDataSet это не источник данных, всего лишь посредник между данными неизвестного вида и FR. Поэтому заполнять там нечего.
    Если структура информации в файлах у тебя не меняется слишком часто, то просто используй таблицы в памяти MemoryTable.
    Подобные компоненты есть как платные так и бесплатные. Например MemTableEh (из EhLib), ExpressMemData (из DevExpress), RxMemoryData (из RxLib или из JCL), kbmMemTable и т.д.
    И уже эти MemoryTable ты сможешь через frxDBDataSet подключать к FR и работать с ними как с обычным DataSet.


  • отредактировано 13:00
    Интересный ответ, Stalker4. Спасибо.

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

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