在 Delphi 中使用 fastreport 打印列表视图项目

Printing listview items using fastreport in Delphi

我正在寻找使用 fastreport 从列表视图打印项目的简单示例或参考。例如:我有一个包含三列的列表视图:id、name 和 marks。列表视图有 n 个项目,每个项目包含个别学生的 ID、姓名和分数。我需要使用表格格式的 fastreport 打印整个列表视图。我用谷歌搜索但找不到适合我的范围的确切样本。同样,我在 fastreport 演示中找不到任何关于此的文档。我正在使用默认安装的 fastreport 版本的 Delphi XE8。

用于演示目的。

在表单中放置以下组件:

  • TButton;
  • TListView;
  • frx报告;
  • frxUserDataSet;

双击 frxReport。在 Fastreport 设计器中做

插入 ReportTitle、MasterData 和 PageFooter 带区。

Report => Data 菜单项。选中 frxUserDataSet 复选框并按 OK 按钮。

frxUserDataSet 分配 MasterData band,双击 MasterData band 和 select frxUserDataSet,然后按 'OK' 按钮。

在 MasterData 带中插入 Text object(备忘录)。 在备忘录中写 [element].

设计师应该是这样的:

现在我们可以写一些代码了:

procedure TForm8.FormCreate(Sender: TObject);
var
  I: Integer;
  Li : TlistItem;
begin
  // Just to fill some data in ListView 
  for I := 1 to 10 do
   begin
    Li := ListView1.Items.Add;
    LI.Caption := 'Col ' + IntToStr(i);
   end;

end;

在 frxReport1 OnGetValue 事件中写入例如:

procedure TForm8.frxReport1GetValue(const VarName: string; var Value: Variant);
begin
  if CompareText(VarName, 'element') = 0 then
    Value := ListView1.Items[frxUserDataSet1.RecNo].Caption;
end;

现在打印数据

procedure TForm8.Button1Click(Sender: TObject);
begin
  frxUserDataSet1.RangeEnd := reCount;
  frxUserDataSet1.RangeEndCount := ListView1.Items.Count;
  frxReport1.ShowReport();
end;

按下Button1后的结果:

注意:在这个答案中使用了 FastReport PrintStringList 演示的一部分。