如何从TStringGrid的内容创建QuickReport

时间:2010-07-14 07:51:05

标签: delphi quickreports

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

如何?

2 个答案:

答案 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)。分步说明:

  1. 在表单
  2. 上删除TClientDataSet
  3. 双击TClientDataSet,点击键盘上的INSERT键添加一个新字段,为每个网格列添加一个字段。示例:COL1,String,128 width。
  4. 右键单击表单上的TClientDataSet,然后单击“Create DataSet”
  5. AT RUNTIME运行这种代码:
  6.   CS.Append;
      CS['COL1'] := 'Whatever';
      CS['COL2'] := 'An other thing';
      CS.Post;
    

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