Delphi Rave报告7.7.0可以使用参数在报告中创建多行吗?

时间:2012-02-29 12:16:52

标签: delphi report

好的我是狂热报道的新手。我已经通过使用乐队获得了我的数据感知好的报告,但现在我需要通过manauly将代码中的参数发送到报告来制作客户报告。

我的教科书示例说我应该为报告制作参数,并将它们放在页面设计器的一列中。所以对于测试我只想填写第一列值Param.Group1,如我的教科书中所述,我使用了以下代码

    // Loop at groups;
    rvpgrouprep.SelectReport('grouprep',False);
    rvpgrouprep.open;

    while cdsgrouprep.eof = False do
    begin
      group :=  cdsgrouprep.FindField('GroupName').AsString;
      rvpgrouprep.SetParam('Group1',group);
      cdsgrouprep.MoveBy(1);
    end;

    rvpgrouprep.Execute;
    rvpgrouprep.Close;

所以我的教科书示例显示,这应该提供param.group1在我的rert上的列的组列表,但是这段代码只在我的报告中提供了一行,这是最后一个条目。 while循环工作我已经对它进行了调整。我错过了什么吗?

任何帮助都是适当的。

1 个答案:

答案 0 :(得分:2)

Rave正如此设计的那样工作。每次更改行时,参数不会生成行。

我们假设您没有告诉任何人他们的意思,变量cdsgrouprep是基于客户端数据集的组。当一个数据集有4行,并且你有一个乐队时,你自然希望rave中的带状报告生成代码能够在你的报告中生成该乐队的4个副本。但是,您可能正在寻找的东西不是依赖于它,而是从代码生成一堆行,并且根本不需要参数。对于很多事情,参数很有用,但不完全是你需要的。

纯粹基于代码的Rave报告在EDN文章中为shown here,如下所示:

procedure TFormMain.PrintTabularReport(Report: TBaseReport);
var
  FolderList : TStringList;
  i          : Integer;
  NumFiles   : Cardinal;
  NumFolders : Cardinal;
  SizeFiles  : Cardinal;
  Root       : string;
begin
  with Report do
  begin
    SetFont('Arial', 15);
    NewLine;
    PrintCenter('List of Folders in the Drive Root', 4);
    NewLine;
    NewLine;
    ClearTabs;
    SetTab(0.2, pjLeft, 1.7, 0, 0, 0);
    SetTab(1.7, pjRight, 3.1, 0, 0, 0);
    SetTab(3.1, pjRight, 3.5, 0, 0, 0);
    SetTab(3.5, pjRight, 4.5, 0, 0, 0);
    SetFont('Arial', 10);
    Bold := True;
    PrintTab('Folder Name');
    PrintTab('Number of Files');
    PrintTab('Number of Folders');
    PrintTab('Size of Files');
    Bold := False;
    NewLine;
    FolderList := TStringList.Create;
    try
      Root := IncludeTrailingPathDelimiter(ExtractFileDrive(ParamStr(0)));
      EnumFolders(FolderList, Root);
      for i := 0 to FolderList.Count - 1 do
      begin
        PrintTab(FolderList[i]);
        GetFolderInfo(IncludeTrailingPathDelimiter(Root+FolderList[i]),
          NumFiles, NumFolders, SizeFiles);
        PrintTab(Format('%u',[NumFiles]));
        PrintTab(Format('%u',[NumFolders]));
        PrintTab(Format('%u bytes',[SizeFiles]));
        NewLine;
      end;
    finally
      FolderList.Free;
    end;
  end;