我在 Windows 7 上使用 Delphi 7 和 QuickReports。通常 QuickReports 需要由查询生成的 DataSet,但我想从 StringGrid 的内容生成报告,就好像 StringGrid 是查询结果的表示一样。
如何?
我在 Windows 7 上使用 Delphi 7 和 QuickReports。通常 QuickReports 需要由查询生成的 DataSet,但我想从 StringGrid 的内容生成报告,就好像 StringGrid 是查询结果的表示一样。
如何?
使用 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;
我假设列集在 StringGrid 中是固定的(并带有相应的 TClientDataSet)。分步说明:
CS.追加; CS['COL1'] := '随便'; CS['COL2'] := '另一件事'; CS.邮政;
您需要循环执行追加/发布,遍历网格中的每一行。您可以在另一个循环中分配 COL1、COL2 等,也可以手动编码。