Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 如何从TStringGrid的内容创建QuickReport_Delphi_Quickreports - Fatal编程技术网

Delphi 如何从TStringGrid的内容创建QuickReport

Delphi 如何从TStringGrid的内容创建QuickReport,delphi,quickreports,Delphi,Quickreports,我在Windows7上使用Delphi7和QuickReports。通常QuickReports需要由查询生成的数据集,但我希望从StringGrid的内容生成一个报告,就好像StringGrid是查询结果的表示一样 如何操作?我假设列集在StringGrid中是固定的(并使用相应的TClientDataSet)。逐步说明: 将TClientDataSet拖放到窗体上 双击TClientDataSet,点击键盘上的INSERT键添加一个新字段,为每个网格列添加一个字段。示例:COL1,字符串,1

我在Windows7上使用Delphi7和QuickReports。通常QuickReports需要由查询生成的数据集,但我希望从StringGrid的内容生成一个报告,就好像StringGrid是查询结果的表示一样


如何操作?

我假设列集在StringGrid中是固定的(并使用相应的TClientDataSet)。逐步说明:

  • 将TClientDataSet拖放到窗体上
  • 双击TClientDataSet,点击键盘上的INSERT键添加一个新字段,为每个网格列添加一个字段。示例:COL1,字符串,128宽度
  • 右键单击表单上的TClientDataSet并点击“创建数据集”
  • 在运行时运行此类代码:
  • CS.追加; CS['COL1']:='Whatever'; CS['COL2']:=“另一件事”; 政务司司长职位;
    您需要在循环中执行Append/Post,在网格中的每一行上循环。您可以在另一个循环中分配COL1、COL2等,也可以手工编码。

    我假设列集在StringGrid中是固定的(并使用相应的TClientDataSet)。逐步说明:

  • 将TClientDataSet拖放到窗体上
  • 双击TClientDataSet,点击键盘上的INSERT键添加一个新字段,为每个网格列添加一个字段。示例:COL1,字符串,128宽度
  • 右键单击表单上的TClientDataSet并点击“创建数据集”
  • 在运行时运行此类代码:
  • CS.追加; CS['COL1']:='Whatever'; CS['COL2']:=“另一件事”; 政务司司长职位;
    您需要在循环中执行Append/Post,在网格中的每一行上循环。您可以在其他循环中分配COL1、COL2等,也可以手工编码。

    使用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;
    
    //CurrLine是一个整数。在您的情况下,它可以表示StringGrid中的一行。
    过程TPrintLogForm.QuickRep1NeedData(发送方:TObject;
    变量(数据:布尔);
    开始
    MoreData:=(CurrLine
    使用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;
    
    //CurrLine是一个整数。在您的情况下,它可以表示StringGrid中的一行。
    过程TPrintLogForm.QuickRep1NeedData(发送方:TObject;
    变量(数据:布尔);
    开始
    MoreData:=(CurrLine
    您可以简单地将clientdataset连接到dbgrid,还是我遗漏了什么?对不起,Marco,我没有使用TDBGrid,我已经将数据导入了TStringGrid。我想从该StringGrid生成报告,而无需重新查询数据库。您只需将clientdataset连接到一个dbgrid,或者我遗漏了什么?对不起,Marco,我没有使用TDBGrid,我已经将数据导入了TStringGrid。我想从StringGrid生成我的报告,无需重新查询数据库。谢谢。不错,可能可以工作(还没有尝试过),但我想在运行时做所有事情(没有设计时更改)+谢谢你及时的回复。不错,可能可以工作(还没有尝试过),但我想在运行时做所有事情(没有设计时更改)+谢谢你及时的回答。谢谢肯,我会试试的。很高兴知道我不一定需要CD。感谢你的专业知识+1你也是。我喜欢这个答案,因为它不仅回答了“StringGrid的CD,如何制作?”这个确切的问题,而且提供了一种更简单的方法来实现所需的结果(StringGrid的QuickReport)。谢谢Ken,我会尝试的。很高兴知道我不一定需要CD。感谢你的专业知识+1你也是。我喜欢这个答案,因为它不仅回答了确切的问题“StringGrid的CD,如何制作?”而且提供了一种更简单的方法来实现所需的结果(StringGrid的QuickReport)。