我在Windows 7上使用Delphi 7和QuickReports。通常QuickReports需要一个查询生成的DataSet,但是我想从StringGrid的内容生成一个报表,好像StringGrid是一个表示结果的查询。
如何?
答案 0 :(得分:5)
使用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;
答案 1 :(得分:4)
我假设列的集合在StringGrid中是固定的(并且具有相应的TClientDataSet)。分步说明:
CS.Append; CS['COL1'] := 'Whatever'; CS['COL2'] := 'An other thing'; CS.Post;
您需要在循环中执行追加/发布,循环遍历网格中的每一行。您可以在另一个循环中指定COL1,COL2等,也可以手动编码。