Не отображать строки

отредактировано 13:57 Раздел: FastReport 4.0
задача: не изменяя датасет (трогать sql запрос нельзя :) ) не отображать в отчете строки, в которых определенное поле нулевое
например, меню:
Пункт1 150.00р
Пункт2 0.00р
Пункт3 100.00р
Пункт4 0.00р

необходимо отображать только
Пункт1 150.00р
Пункт3 100.00р

подскажите, куда копать?

Комментарии

  • gpigpi
    отредактировано 13:57
    TfrxMasterData.OnBeforePrint

    MasterData1.Visible := ABS(<YourDatasetName."FieldName">) > 0.0001;
  • отредактировано 13:57
    Хотелось продолжить эту тему "Не отображать строки" вопросом :

    А как скрыть первый пустой столбец в отчете (смотреть картинку) в случае строки на пол-листа ?

    Отчет представляет собой печать чисел на формате размером по пол-листа в 2 колонки,
    если значение меньше 100 скрываем бэнд :
    if <element> < 100 then
    begin MasterData1.visible := false
    else MasterData1.visible := true ;

    Но если числа < 100 попадают на 2 и так далее страницу, то они все красиво убираются, но вот для первой колонки это не работает :)
    саму этикетку скрывает, но печатает пустую колонку. например последовательность 3,100,200,12,800 ...

    Для Portrait еще помогает код
    if (<Line> = 2) and (not MasterData1.Visible) then Engine.CurX := 0 ;
    А для landscape ориентации это не работает !!!
  • gpigpi
    отредактировано 13:57
    Попробуйте пофиксить frxEngine.pas (этот фикс для бэндов с несколькими столбцами, но, возможно, сработает и в Вашем случае)
    procedure TfrxEngine.CheckBandColumns(Band: TfrxDataBand; ColumnKeepPos: Integer;
      SaveCurY: Extended);
    begin
      if Band.Columns > 1 then
      begin
        if not Band.Visible then exit; //add this line
        { collect max position in b.FMaxY }
        if CurY > Band.FMaxY then
          Band.FMaxY := CurY;
        { all columns have been printed }
        if Band.CurColumn >= Band.Columns then
        begin
          { need page break, don't break if page has Endless Height}
          if ((PageHeight - FooterHeight) - Band.FMaxY <= 1e-4) and (not FPage.EndlessHeight) then
          begin
            if FKeeping then  { standard keep procedure }
              NewColumn
            else
            begin
              PreviewPages.CutObjects(ColumnKeepPos);
              NewColumn;
              PreviewPages.PasteObjects(CurX, CurY);
              CurY := CurY + Band.FMaxY - SaveCurY;
            end;
          end
          else
            CurY := Band.FMaxY;  { start the new band from saved b.FMaxY }
        end
        else
          CurY := SaveCurY;   { start the new band from saved SaveCurY }
        if Band.Visible then
          Band.CurColumn := Band.CurColumn + 1;
      end;
    end;
    
  • gpigpi
    отредактировано October 2012
    Не сработает
      if Band.Columns > 1 then
    
    Попробуйте использвать бэнд с двумя столбцами
  • отредактировано October 2012
    Спасибо за помощь.
    Пофиксил frxEngine.pas.
    В моем случае бэнд как раз и есть с двумя столбцами.
    И вроде как заработало, строки <100 благополучно убираются без пустых страничек.
    Бум надеяться, что это работает во всех случаях.

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

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