1

我在 Windows 7 上使用 Delphi 7 和 QuickReports。通常 QuickReports 需要由查询生成的 DataSet,但我想从 StringGrid 的内容生成报告,就好像 StringGrid 是查询结果的表示一样。

如何?

4

2 回答 2

6

使用 QuickReport.OnNeedData 事件处理程序。它传递一个名为 MoreData 的 var 参数(一个布尔值);将其设置为 True 意味着它会再次被调用。将 QuickReport.DataSource 属性留空,并使用纯 TQRText 控件而不是 TQRDBText。

// CurrLine is an Integer. In your case, it can represent a row in the StringGrid.
procedure TPrintLogForm.QuickRep1NeedData(Sender: TObject;
                      var MoreData: Boolean);
begin
  MoreData := (CurrLine < StringGrid1.RowCount);
  if MoreData then
  begin
    qrTextLine.Caption := StringGrid1.Cells[0, CurrLine];
    qrTextData.Caption := StringGrid1.Cells[1, CurrLine];
    Inc(CurrLine);
  end;
end;
于 2010-07-14T17:44:44.130 回答
4

我假设列集在 StringGrid 中是固定的(并带有相应的 TClientDataSet)。分步说明:

  1. 将 TClientDataSet 拖放到表单上
  2. 双击 TClientDataSet,按键盘上的 INSERT 键添加一个新字段,为网格的每个列添加一个字段。示例:COL1,字符串,128 宽度。
  3. 右键单击窗体上的 TClientDataSet 并单击“创建数据集”
  4. 在 RUNTIME 运行这种代码:
  CS.追加;
  CS['COL1'] := '随便';
  CS['COL2'] := '另一件事';
  CS.邮政;

您需要循环执行追加/发布,遍历网格中的每一行。您可以在另一个循环中分配 COL1、COL2 等,也可以手动编码。

于 2010-07-14T08:49:25.950 回答