Как вручную заполнить Frxuserdataset?
Здравствуйте.
В моей программе предусмотрена печать нескольких видов отчётов. Информация для отчётов берётся из файлов. Информация считывается из файла в массив структур (например). Соответственно, сколько файолв с данными, столько и соответствующих массивов. (Пока их 4.)
В зависимости от требуемого отчёта в frxReport подгружается соответствующий шаблон (*.fr3).
А дальше возникает вопрос. Если б отчёт был всего один, можно было бы в шаблон в MasterData поместить несколько Memo со значениями-переменными типа [Date], [Name], и пр. А в методе frxReport.OnGetValue присваивать требуемым переменными необходимые значения.
Но у меня несколько шаблонов отчётов. Какой из них будет подан на печать - зависит от самих данных (например, все отчёты с именем Иван печатаются по шаблону №1, с именем Пётр - по шаблону №2, и т.д.) Поэтому в этом случае в обработчике frxReport.OnGetValue я не могу задать значения для всех переменных отчёта.
И у меня возникла мысль - если б можно было до печати заполнить frxUserDataSet (для каждого Master Data или Detail Data) моими данными из файлов, то потом FastReport сам брал бы данные из этого frxUserDataSet и вставлял в отчёт.
Но я никак не могу понять, как можно заполнить frxUserDataSet своими данными.
Или может, есть уже другое, более подходящее решение моего вопроса?
Спасибо.
В моей программе предусмотрена печать нескольких видов отчётов. Информация для отчётов берётся из файлов. Информация считывается из файла в массив структур (например). Соответственно, сколько файолв с данными, столько и соответствующих массивов. (Пока их 4.)
В зависимости от требуемого отчёта в frxReport подгружается соответствующий шаблон (*.fr3).
А дальше возникает вопрос. Если б отчёт был всего один, можно было бы в шаблон в MasterData поместить несколько Memo со значениями-переменными типа [Date], [Name], и пр. А в методе frxReport.OnGetValue присваивать требуемым переменными необходимые значения.
Но у меня несколько шаблонов отчётов. Какой из них будет подан на печать - зависит от самих данных (например, все отчёты с именем Иван печатаются по шаблону №1, с именем Пётр - по шаблону №2, и т.д.) Поэтому в этом случае в обработчике frxReport.OnGetValue я не могу задать значения для всех переменных отчёта.
И у меня возникла мысль - если б можно было до печати заполнить frxUserDataSet (для каждого Master Data или Detail Data) моими данными из файлов, то потом FastReport сам брал бы данные из этого frxUserDataSet и вставлял в отчёт.
Но я никак не могу понять, как можно заполнить frxUserDataSet своими данными.
Или может, есть уже другое, более подходящее решение моего вопроса?
Спасибо.
Комментарии
Мне нужно организовать возможность печати четырёх разных отчётов. Шаблоны, разумеется, хранятся в файлах. В каждом шаблоне по одному MasterBand. Ещё есть и другие переменные, которые находятся в заголовке, например, но с ними я уже разобрался.
В MasterBand первого отчёта имеется 3 Memo со значениями: [Date], [Time], [Text]. Соответственно, при печати в событии OnGetValue компонента frxReport эти переменные должны заполняться.
На форме имею 4 кнопки - по одной на функцию печать отчёта N.
Хочу сделать следующее: по щелчку по кнопке 1 датасет frxUserDataSet заполняется тремя полями (Fields:TStringList), а затем в него добавляются значения, как в таблицу. И frxReport берёт значения из него автоматически и подставляет их в поля переменных.
Можно ли так сделать?
Если структура информации в файлах у тебя не меняется слишком часто, то просто используй таблицы в памяти MemoryTable.
Подобные компоненты есть как платные так и бесплатные. Например MemTableEh (из EhLib), ExpressMemData (из DevExpress), RxMemoryData (из RxLib или из JCL), kbmMemTable и т.д.
И уже эти MemoryTable ты сможешь через frxDBDataSet подключать к FR и работать с ними как с обычным DataSet.