Добрый день, хочу продолжить тему.
Можно более подробный пример использования метода SetParameterValue? Дело в том, что мне нужно не просто присвоить значение, а вычислить его исходя из текущей ситуации. В Delphi OnGetValue вызывался по мере заполнения отчета данными, здесь мне нужно то же самое. А у меня пока получилось присвоить переменную только перед report.show().
А что значит - исходя из текущей ситуации? В зависимости от текущей строки данных? Добавляйте вычисляемое поле в источник данных, либо в самом отчете напишите ф-ю, которая вернет нужное значение.
Ну да, исходя из текущей строки. Например запрос возвращает несколько строк, но мне нужно отобразить не все, а отвечающие какому-либо условию. Поэтому в самом отчете я указывала например параметр [Field], а в обработке OnGetValue писала что-то типа:
if ParName = 'Field' then
begin
while Query1.FieldByName('field1').AsInteger <=5 do
Query1.Next;
ParValue := Query1.FieldByName('field1').AsInteger;
end;
Это просто пример, суть в том, что мне необходима возможность перескочить на следующую строчку. Обработать эту ситуацию запросом не представляется возможным, потому что один запрос используется во многих шаблонах, легче в каждом обработать по своему, чем писать 3 метра кода на каждый случай. Может подскажете как обработать такой случай в шаблоне?
Если стоит задача отфильтровать источник данных по какому-либо условию, проще сделать так:
- указать условие фильтрации в редакторе датабэнда;
- либо создать обработчик события databand.BeforePrint и написать в нем что-то вроде:
Хорошо, а если стоит задача, чтобы количество строк было фиксированным? Я вот рисую квитанции, они стандартного вида. То есть например, должно быть 15 строк из которых часть (всегда разная) получается заполненной нужными данными, а остальные строки должны быть пустыми. В FastReport.Net у меня получается, что я привязываю данные к DataBand,поэтому рисуется только то количество строк, которое возвращает запрос. А как нарисовать необходимое количество пустых? В Delphi я решала эту задачу добавлением в запрос строки с пустым значением, она получалась последней. Потом рисовала в шаблоне 15 строк, MasterData и DetailData не использовала, в каждой строке ставила параметр [Next], а в OnGetValue писала опять же Query1.Next. В результате получалось, что выводились все строки с данными, а потом пустые (потому что последняя повторялась много раз). Может не самое верное решение, но другого не нашлось. Такое можно сделать в FastReport.Net?
Но тогда в связи с этим еще один вопрос. Вот у меня, допустим, есть мой дочерний бэнд, который выдает в итоге табличку из 15 строк. А я хочу, чтобы эта таблица была не на всю ширину страницы, а только на часть, а сбоку от таблицы располагалась информация из другого запроса или хотя бы просто текст. Это возможно? Сделать дочерний бэнд не на всю ширину страницы?
Как работают фильтры?
В фильтре бэнда данных пишу - [NamesServers.ID]==7
где NamesServers - таблица , ID - поле типа Int32
т.е. хочу выбрать все записи где ID равно 7. Но отчет не формируется и вызывает ошибку.
Аналогично пробывал и с параметром [NamesServers.ID]==[IDServers]
Где IDServersимя параметра типа Int32.
Параметр передаю вот так - ReportServers.SetParameterValue("IDServers", 7);
(ReportServers - class Report)
Что не так?
Комментарии
есть метод report.SetParameterValue("paramname", value). Если переменной с таким именем нет, она будет создана.
Можно более подробный пример использования метода SetParameterValue? Дело в том, что мне нужно не просто присвоить значение, а вычислить его исходя из текущей ситуации. В Delphi OnGetValue вызывался по мере заполнения отчета данными, здесь мне нужно то же самое. А у меня пока получилось присвоить переменную только перед report.show().
А что значит - исходя из текущей ситуации? В зависимости от текущей строки данных? Добавляйте вычисляемое поле в источник данных, либо в самом отчете напишите ф-ю, которая вернет нужное значение.
- указать условие фильтрации в редакторе датабэнда;
- либо создать обработчик события databand.BeforePrint и написать в нем что-то вроде:
http://www.fast-report.com/documentation/U...temptybands.htm
В фильтре бэнда данных пишу - [NamesServers.ID]==7
где NamesServers - таблица , ID - поле типа Int32
т.е. хочу выбрать все записи где ID равно 7. Но отчет не формируется и вызывает ошибку.
Аналогично пробывал и с параметром [NamesServers.ID]==[IDServers]
Где IDServersимя параметра типа Int32.
Параметр передаю вот так - ReportServers.SetParameterValue("IDServers", 7);
(ReportServers - class Report)
Что не так?
По первому вопросу - можно использовать вложенный отчет:
http://www.fast-report.com/documentation/U...tsidebyside.htm
По второму - пришлите текст ошибки.