Динамическое создание отчета с вертикальным бандом

отредактировано 08:05 Раздел: FastReport 4.0
Прошу помочь. Есть процедура, которая должна динамически генерить отчет в FastReport, но при этом использать вертикальный банд.
procedure PrintVerticalGridContentFastRep(VerticalList: TcxDBVerticalGrid);
var
  Report: TfrxReport;
  drDataSet: TfrxDBDataset;
  Page: TfrxReportPage;
  Header: TfrxHeader;
  DataBand: TfrxMasterData;
  I: integer;
  RepName: string;
  TopPos: integer;
begin
RepName:=VerticalList.hint;
 if VerticalList.FocusedRow=nil then
  begin
    Application.MessageBox(pchar(msg_DataSetIsEmptyShort),pchar(msg_Caption),MB_ICONINFORMATION+MB_OK);
    exit;
  end;

drDataSet:=TfrxDBDataset.Create(nil);
with drDataSet do
  begin
    DataSet:=VerticalList.DataController.DataSource.DataSet;
    DataSet.DisableControls;
  end;

Report:=TfrxReport.Create(nil);
with Report do
  begin
    CreateUniqueName;
    DataSets.Add(drDataSet);
    DotMatrixReport:=False;
    with EngineOptions do
      begin
        PrintIfEmpty:=True;
        TempDir:=ProgramSettings.RepPath;
      end;
    IniFile:='\Software\Fast Reports';
    with PreviewOptions do
      begin
        AllowEdit:=False;
        Buttons:=[pbPrint,pbSave,pbZoom,pbFind,pbPageSetup,pbNavigator,pbNoFullScreen,pbNoEmail];
        MDIChild:=True;
        Modal:=False;
        Zoom:=1;
      end;
    with ReportOptions do
      begin
        Name:='Предварительный просмотр перед печатью: '+chr(39)+RepName+chr(39);
        Author:=UserParam.Active_UserName;
        Compressed:=True;
        CreateDate:=Date;
        VersionBuild:='1';
        VersionMajor:='0';
        VersionMinor:='0';
        VersionRelease:='1';
      end;
  end;

Page := TfrxReportPage.Create(Report);
with Page do
  begin
    CreateUniqueName;
    SetDefaults;
  end;

Header := TfrxHeader.Create(Page);
with Header do
  begin
    CreateUniqueName;
    Vertical:=True;
    Left:=0;
    Width := 200;
  end;

TopPos:=0;
for I := 0 to VerticalList.Rows.Count-1 do
  begin
    if not VerticalList.Rows[I].Visible then Continue;
    with TfrxMemoView.Create(Header) do
      begin
        CreateUniqueName;
        Frame.Width:=2;
        Frame.Typ:=[ftBottom,ftTop,ftLeft,ftRight];
        Text:=TcxDBEditorRow(VerticalList.Rows.Items[I]).Properties.Caption;
        Font.Style:=[fsBold];
        HAlign := haCenter;
        VAlign := vaCenter;
        SetBounds(0, TopPos, 200, 20);
        WordWrap:=True;
        Color:=$00E9E9E9;
        StretchMode:=smMaxHeight;
      end;
      TopPos:=TopPos+20; 
  end;

DataBand := TfrxMasterData.Create(Page);
with DataBand do
  begin
    CreateUniqueName;
    DataSet := drDataSet;
    Left:=200;
    Width:= 100;
    Stretched:=True;
    Vertical:=True;
  end;

TopPos:=0;
for I := 0 to VerticalList.Rows.Count-1 do
  begin
    if not VerticalList.Rows[I].Visible then Continue;
    with TfrxMemoView.Create(DataBand) do
      begin
        CreateUniqueName;
        DataSet := drDataSet;
        DataField :=  TcxDBEditorRow(VerticalList.Rows.Items[I]).Properties.DataBinding.FieldName;

        Frame.Width:=1;
        Frame.Typ:=[ftBottom,ftTop,ftLeft,ftRight];

        SetBounds(0, TopPos, 200, 20);
        WordWrap:=True;
        StretchMode:=smMaxHeight;
        VAlign := vaCenter;
      end;
      TopPos:=TopPos+20;;
  end;

if not Report.PrepareReport then
  begin
    Application.MessageBox(pchar(msg_ErrorDictPrintSimply),pchar(msg_Caption),MB_ICONINFORMATION+MB_OK);
    drDataSet.dataset.enablecontrols;
    exit;
  end;

Report.ShowPreparedReport;
drDataSet.dataset.enablecontrols;
end;

Отчет не формируется. Пустой лист.
Примерно тоже самое, но для горизонтальных бандов работает без проблем.

Подскажите плз, в чем ошибся?

Комментарии

  • gpigpi
    отредактировано 08:05
    Пример в аттаче

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

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