我在Windows 7上使用Delphi 7和QuickReports。通常,QuickReports需要由查询生成的数据集,但是我想从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;

08-07 01:33