Как передать свойства репорту ?

отредактировано July 2012 Раздел: FastReport .NET
...

Комментарии

  • отредактировано 13:48
    Здравствуйте,

    есть метод report.SetParameterValue("paramname", value). Если переменной с таким именем нет, она будет создана.
  • отредактировано 13:48
    Спасибо!
  • отредактировано 13:48
    Добрый день, хочу продолжить тему.
    Можно более подробный пример использования метода SetParameterValue? Дело в том, что мне нужно не просто присвоить значение, а вычислить его исходя из текущей ситуации. В Delphi OnGetValue вызывался по мере заполнения отчета данными, здесь мне нужно то же самое. А у меня пока получилось присвоить переменную только перед report.show().
  • отредактировано 13:48
    Здравствуйте,

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

    По первому вопросу - можно использовать вложенный отчет:
    http://www.fast-report.com/documentation/U...tsidebyside.htm

    По второму - пришлите текст ошибки.

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

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