1、设置QuickReport的DataSet为空。
2、在QuickReport的BeforePrint里面将要显示的数据集合初始化,如Query1.First;
3、在OnNeedData里面写代码,同时设置MoreData的状态、移动数据集合
如:QrLabel1.Caption:=Query1.FieldByName('Col1').AsString;
Query1.Next;
MoreData:=Not Query1.Eof;
这样就OK了!

https://wedelphi.com/t/92391/

quickreport 的 OnNeedData:
procedure TForm1.QuickRep1NeedData(Sender: TObject;
var MoreData: Boolean);
begin
moredata:=true;
if not table1.Eof then
begin
begin
qrlabel1.Caption := table1.fieldbyname('Name').AsString;
//subDetail中要显示的数据
qrlabel2.Caption := table1.fieldbyname('Age').AsString;
end;
table1.Next;
end
else
//每页显示五行,不足用空行补齐
if nRow < 5 then
begin
qrlabel1.Caption := '';
qrlabel2.Caption := '';
end;
if nRow = 5 then
begin
moredata := false;
table1.First;
nRow := 0;
end;
Inc(nRow);
end;

https://wedelphi.com/t/302356/

如果你有quickreport的源代码可以这样改造,下面代码是需要加入的。
由于这里不一定说的清楚,你如果写过控件可以自己改造,代码就这些,
如果不行可以和我单独交流:  TQrCustomController = class(TComponent) {控制}
private
    FDetailPerPage: integer;
    procedure SetDeatilPerPage(APerPage: integer);
public
      property DetailPerPage: integer read FDetailPerPage write   SetDeatilPerPage;
end;
TCustomQrReport = class(TQrBasePanel)
private
    FDetailPerPage: integer;
    procedure SetDeatilPerPage(APerPage: integer);
public
    procedure PrintBandchildNone(ABand: TNoteCustomBand); {打印但没有孩子}
    property DetailPerPage: integer read FDetailPerPage write SetDeatilPerPage;
end;
procedure TCustomNotePaint.PrintBandchildNone(ABand: TNoteCustomBand);
{打印但没有孩子}
var
  dmy: integer;
begin
  if ABand <> nil then
  begin
    if ABand.AlignToBottom then
    begin
      if Page.Orientation = poPortrait then
        dmy := round(QRPrinter.PaperLength - Page.BottomMargin -
          ABand.Size.Length - FPageFooterSize)
      else
        dmy := round(QRPrinter.PaperWidth - Page.BottomMargin -
          ABand.Size.Length - FPageFooterSize);
      if dmy > CurrentY then
        CurrentY := dmy;
    end;
    ABand.PrintNoChild;
  end;
end;
//加入固定数目的空白行procedure TQrController.PrintBlankFooter(Anum: integer);
var
  I, j: integer;
  TmpBand: TNoteband;
  TmpColor: tColor;
begin
  if Anum = 0 then
    exit;
  if Anum = FDetailPerPage then
    exit;
  TmpBand := TQrBand.Create(FParentReport);
  TmpBand.BandType := rbSummary;
  TmpBand.Frame.DrawLeft := true;
  TmpBand.Frame.DrawRight := true;
  TmpBand.Frame.DrawBottom := true;
  if ((FDetail <> nil) and (FDetail.ControlCount > 0)) then
    TmpColor := TQrCustomLabel(FDetail.Controls[0]).Font.Color;
  for I := Anum - 1 downto 0 do
  begin
    for j := 0 to FDetail.ControlCount - 1 do
    begin
      TQrCustomLabel(FDetail.Controls[j]).Font.Color := FDetail.Color;
      {颜色为底色}
    end;
    FParentReport.PrintBandchildNone(FDetail);
    {有效但造成了最后一条记录的重复计算,修改后已经解决}
    for j := 0 to FDetail.ControlCount - 1 do
    begin
      TNoteCustomLabel(FDetail.Controls[j]).Font.Color := TmpColor;
    end;
  end;
  TmpBand.Free;
end;
///Suny modified 2000.3.15 one functionprocedure TQrCustomController.SetDeatilPerPage(APerPage: integer);
begin
  FDetailPerPage := APerPage;
end;///Suny modified 2000.3.15 one functionprocedure TCustomQrReport.SetDeatilPerPage(APerPage: integer);
begin
  FDetailPerPage := APerPage;
  Controller.DetailPerPage := AperPage;
end;
在procedure TQrController.Execute;函数中找到:
          ParentReport.QRPrinter.Progress := (Longint(DetailNumber) * 100) div
            RecCount;
一句,在其后加入
        if FDetailPerPage <> 0 then
        begin
          if (FDetailNumber mod FDetailPerPage) = 0 then
          begin
            if assigned(FFooter) then
            begin
              if (SelfCheck is TCustomNotePaint) and
                FFooter.AlignToBottom then
                ;
              // ParentReport.FPageFooterSize := 0;
              if (FFooter <> nil) and (ParentReport.PageNumber = 0) then
                ParentReport.NewPage;
              ParentReport.PrintBand(FFooter);
            end;再找到:
      CheckLastGroupFooters;
      PrintGroupFooters;
      if assigned(FFooter) then
      begin
        if (SelfCheck is TCustomNotePaint) and
          FFooter.AlignToBottom then
          ;
在其前加入:
      if FDetailPerPage <> 0 then
        if detailNumber = RecCount then
          PrintBlankFooter(FDetailPerPage - (RecCount mod FDetailPerPage));

http://www.debugease.com/delphi/4231392.html

QuickReport的OnNeedData的触发情况的更多相关文章

  1. 关于Application_End 与 Application_Start事件触发情况的测试(待续)

    测试项目搭建 定义一个简单的Mvc项目,有如下文件: (1) public class Startup { public void Configuration(IAppBuilder app) { a ...

  2. 触发Full GC执行的情况

    除直接调用System.gc外,触发Full GC执行的情况有如下四种. 1. 旧生代空间不足 旧生代空间只有在新生代对象转入及创建为大对象.大数组时才会出现不足的现象,当执行Full GC后空间仍然 ...

  3. GC之三--GC 触发Full GC执行的情况及应对策略

    1.System.gc()方法的调用 此方法的调用是建议JVM进行Full GC,虽然只是建议而非一定,但很多情况下它会触发 Full GC,从而增加Full GC的频率,也即增加了间歇性停顿的次数. ...

  4. 触发JVM进行Full GC的情况及应对策略

    堆内存划分为 Eden.Survivor 和 Tenured/Old 空间,如下图所示: 从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC,对老年代GC称为M ...

  5. 触发Full GC执行的情况 以及其它补充信息

    除直接调用System.gc外,触发Full GC执行的情况有如下四种.1. 旧生代空间不足旧生代空间只有在新生代对象转入及创建为大对象.大数组时才会出现不足的现象,当执行Full GC后空间仍然不足 ...

  6. GC之八--GC 触发Full GC执行的情况及应对策略

    目录: GC之一--GC 的算法分析.垃圾收集器.内存分配策略介绍 GC之二--GC日志分析(jdk1.8)整理中 GC之三--GC 触发Full GC执行的情况及应对策略 gc之四--Minor G ...

  7. java触发full gc的几种情况概述

    前言 近期被问及这个问题,在此记录整理一下. System.gc()方法的调用 此方法的调用是建议JVM进行Full GC,虽然只是建议而非一定,但很多情况下它会触发 Full GC,从而增加Full ...

  8. Delphi ComboBox的属性和事件、及几个鼠标事件的触发

    临时做了两个小的测试程序,为了彻底弄清楚combobox的OnClick.OnChange.OnDropDown.OnCloseUp.OnSelect事件的触发及其先后顺序. 另附常用鼠标事件的触发情 ...

  9. JVM-触发Full GC的情况

    除直接调用System.gc外,触发Full GC执行的情况有如下四种: 1.老年代空间不足 老年代空间只有在新生代对象转入及创建为大对象.大数组时才会出现不足现象,当执行Full GC后空间仍然不足 ...

随机推荐

  1. ETL概述 分类: H2_ORACLE 2013-08-23 10:36 344人阅读 评论(0) 收藏

    转自:http://blog.csdn.net/leosoft/article/details/4279536 ETL,Extraction-Transformation-Loading的缩写,中文名 ...

  2. dmalloc arm-linux平台使用

    话说“工欲善其事,必先得其器”,用C语言写程序,最怕遇到个什么内存泄漏,内存越界访问了,心里那个急啊... 如果在i368-linlux上,valgrind工具是首选,但在arm-linux平台上,如 ...

  3. Struts2与Spring的整合

    今天倒腾了半天,终于是把这个两个框架整合到一起了.还是要写一下总结,同时给大家一些帮助. 开发环境:myeclipse 9.0(不好用!)tomcat6.0 1.准备工作 需要导入的包:struts2 ...

  4. jquery-5 jQuery筛选选择器

    jquery-5  jQuery筛选选择器 一.总结 一句话总结:选择器加动态添加方法可以不用想方法名,这个简单方便. 1.筛选选择器有哪三种? 过滤 查找 串联 1.过滤 eq();first(); ...

  5. js进阶 10-8 伪类选择器有哪几类(自己不用,永远不是自己的)

    js进阶 10-8 伪类选择器有哪几类(自己不用,永远不是自己的) 一.总结 一句话总结:自己不用,永远不是自己的. 0.学而不用,却是为何? 自己不用,永远不是自己的,有需求的时候要想到它,然后操作 ...

  6. html5中的dom中的各种节点的层次关系是怎样的

    html5中的dom中的各种节点的层次关系是怎样的 一.总结 一句话总结:Node节点是所有节点的基类,所以都继承它的方法 1.dom提供在js中动态修改html标签的作用 比如增加修改标签等,并且是 ...

  7. PatentTips - Scheduling compute kernel workgroups to heterogeneous processors based on historical processor execution times and utilizations

    BACKGROUND OF THE INVENTION  1. Field of the Invention  The present invention relates generally to h ...

  8. HDU 1244 Max Sum Plus Plus Plus - dp

    传送门 题目大意: 给一个序列,要求将序列分成m段,从左至右每一段分别长l1,l2,...lm,求最大的和是多少. 题目分析: 和最大m段子段和相似,先枚举\(i \in [1,m]\),然后$j \ ...

  9. POJ 2418-Hardwood Species(map)

    Hardwood Species Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 18770   Accepted: 740 ...

  10. Docker Xshell

    Windows安装Docker Xshell无法连接虚拟机解决方案 DOCKER windows安装 6.1 下载地址 6.2 用FTP工具上传tar包 6.3 安装 6.4 查看镜像 6.5 运行 ...