如果你使用的是delphi自带的Qickreport的话,只要在rbPageHeader上放置QRExpr将其expression设为PAGENUMBER(这就是页号),在rbPageFooter上放置QRExpr将其expression设为COLUMNNUMBER(这就是记录数)

解决方案 »

  1.   

    这个应该,在dataser里得出,
    我想。在报表里,我也不知道了
      

  2.   

    你可以在footerband里
    加一个qrexpr
    expression设为'统计:此班级共%n人'
    在它的onprint事件上
    判断是否qucikrep.dataset.eof
    如果是
    format(qrexpr.expression,quickrep.dataset.recordcount)
    如不是
    qrexpr.enabled:=flase;
    就行了
      

  3.   

    用rbPageFooter可以,但它总显示在页底,即使最后一页只有几行——如果希望这样的话也行;如果要求‘统计……’紧接着打印记录显示可用rbSummary;至于QRExpr的表达式我不太熟,但用QRLabel,并在调用打印窗体之前给它赋值,想加什么就加什么,也很方便!
      

  4.   

    我使用的是delphi自代的报表程序,给如何解决呢? 
      

  5.   

    你放一个TSummaryBand,再在上面放一个TQRLabel控件
    在它的OnPrint事件上做:
    QRLabel1.Caption:='此班级共'+IntToStr(quickrep.dataset.recordcount)+'人'
    TSummaryBand控件是紧跟在最后一条记录之后的。
      

  6.   

    用DELPHI编写特殊报表 
    广西省 韦明 
    ---- 我用DELPHI为某单位编写信息管理系统时,财务要求工资统计等报表每一页的最后一行都应有合计(如下表)。 ---- 用DELPHI提供的TQuidkRep部件的HasSummary边条制作时是每一个报表的最后一页才有合计,不符合财务要求。虽然不用TQuidkRep部件重头开始编程编写报表打印可以做到每页有合计,但工作量极大。能不能用QReport面板下提供的部件完成呢?本人仔细分析了QReport面板下的各功能强大的部件,完全可以做到。具体如下: ---- 1、 数据表ManPay.db的结构为: ManName    员工名
    JustClass      台班
    JustTotal      工资
    WaitClass    台班
    WaitTotal    工资
    Repair        修理工资
    Jobpay        计件工资
    Total        合计---- 2、 新建一表单Form1,在其上放一个TTable部件,其TableName设为ManPay.db; ---- 3、 在表单Form1上放TQuidkRep部件QuidkRep1,设置QuidkRep1的Bands属性值为:HasPageFooter,HasDetail,HasColumnHeader;此时在QuidkRep1上有三个边条分别为:PageHeaderBand1,DetailBand1,ColumeHeaderBand1。象上表一样设置好报表结构,如:在PageHeaderBand1边条上放一个TQRLabel部件,设其Caption属性为‘员工工资表’; 以此类推,在ColumeHeaderBand1放相应数量TQRLabel部件,并按报表列的标题的要求进行列标题的而设置相应的TQRLabel部件的Caption属性。在DetailBand1边条上放八个TQRLabel部件,其Name属性分别为RLb1, RLb2, RLb3, RLb4, RLb5, RLb6, RLb7, RLb8。设置QuidkRep1的DataSet为空; ---- 4、 在表单Form1上放TQRSubDetail部件QRSubDetail,在QRSubDetail上放九个TQRLabel部件,其中一个TQRLabel部件的Caption属性设为'合计',其中五个的Name属性分别为:RSL1,RSL2, RSL3, RSL4, RSL5。另外三个的Caption属性分别为:‘制表:’‘审核:’‘审批:’; ---- 5、 报表的线条用TQRShape部件,在此略。设置好的报表应如上表一样。 ---- 6、 编程: ---- 一、双击QuickRep1的OnNeedData事件,输入如下代码: procedure Tform1.QuickRep1NeedData(Sender: TObject;
      var MoreData: Boolean);
    begin
      MoreData:=True;  //允许打印记录边条
      with Tabel1 do
      begin
        if not Eof then
        begin
          RLb1.Caption:=FieldByName('FixingName').AsString;
          RLb2.Caption:=FieldByName('JustClass').AsString;
          RLb3.Caption:=FieldByName('JustTotal').AsString;
          RLb4.Caption:=FieldByName('WaitClass').AsString;
          RLb5.Caption:=FieldByName('WaitTotal').AsString;
          RLb6.Caption:=FieldByName('Repair').AsString;
          RLb7.Caption:=FieldByName('Jobpay').AsString;
          RLb8.Caption:=FieldByName('Total').AsString;
          FJustTotal:= FJustTotal +FieldByName('JustTotal').AsFloat;
          FWaitTotal:= FWaitTotal +FieldByName('WaitTotal').AsFloat;
          FRepair:= FRepair +FieldByName('Repair').AsFloat;
          FJobpay:= FJobpay +FieldByName('Jobpay').AsFloat;
          FTotal:=FTotal+FieldByName('Total').AsFloat;
        end
        else
        begin
          //设定每页打印13行,最后一页不够13行时用空行代替。
      打印行数可根据      //实际情况要求设定。
          if FNum< 14 then    
          begin
          RLb1.Caption:='';
          RLb2.Caption:='';
          RLb3.Caption:='';
          RLb4.Caption:='';
          RLb5.Caption:='';
          RLb6.Caption:='';
          RLb7.Caption:='';
          RLb8.Caption:='';
          end;
        end;
        if not Eof then Next
        else if FNum=14 then
        begin
          MoreData:=False;// 不打印记录边条
          FNum:=0;
          First;
        end;
        Inc(FNum);
      end;
    end;
    ---- 二、双击QRSubDetail1的OnAfterPrint事件,输入如下代码: procedure Tform1.QRSubDetail1AfterPrint(Sender: TQRCustomBand;
      BandPrinted: Boolean);
    begin
      if FNum=14 then
      begin
        if not Table1.Eof then
        begin
          Form1.QuickRep1.NewColumn;//建立新页
          FNum:=1;
        end;
      end;
    end;
    ---- 三、双击QRSubDetail1的OnBeforePrint事件,输入如下代码: procedure Tform1.QRSubDetail1BeforePrint(Sender: TQRCustomBand;
      var PrintBand: Boolean);
    begin
      if FNum=14 then
      begin
        RSL1.Caption:=FloatToStr(FJustTotal);
        RSL2.Caption:=FloatToStr(FWaitTotal);
        RSL3.Caption:=FloatToStr(FRepair);
        RSL4.Caption:=FloatToStr(FJobpay);
        RSL5.Caption:=FloatToStr(FTotal);
        PrintBand:=True;//打印明细边条
        FJustTotal:=0;
        FWaitTotal:=0;
        FRepair:=0;
        FJobpay:=0;
        FTotal:=0;
      end else PrintBand:=False; //不打印明细边条
    end;
    ---- 四、双击Form1的On Create事件,输入如下代码: procedure Tform1.FormCreate(Sender: TObject);
    begin
      FNum:=1;
      FJustTotal:=0;
      FWaittotal:=0;
      FRepair:=0;
      FJobpay:=0;
      FTotal:=0;
    end;
    在Form1中的private下增加如下声明:
        FNum: Integer;//每页可打印行数控制器
        FTotal: Real;
        FJustTotal,FWaitTotal: Real;
    FRepair,FJobpay: Real;
    ---- 至此,一个可打印特殊报表的设计完成,达到财务的要求。以上代码在win98,Delphi4中运行通过。 
     
    回复人: tlovexyj(菠萝菠萝蜜) (2001-11-29 19:41:23)  得0分 
    这样一定是可以的,因为我已经试过了。
    不过出现一个问题,我是win2000A下做的,打印机是NEC pin writer2000
    2000下一切正常,可是98下就不行了,装了最新的驱动还是不行,每次都只打印最左边,而
    且还只是一部分,不清楚为什么,换RBuilder就可以在98下打印,不过又不会实现上述功能。我想要么是打印机的问题,要么是quickrep的问题,升级quickrep到3.07也不行。现在好像到了3.5,可是没有password下不下来,唉。所以介绍给你,试试看会不会有同样的问题。