打印的时候如果记录数不满一页,剩下的就以空行填充,我用的是主从数据集,特别是在打印多条数据的时候,每页的记录数都不确定,请问如何实现,在线等,先谢谢各位了

解决方案 »

  1.   

    OnNeedData里设置 MoreData := true,则将继续打印。打印新页时,每打印一行,打印的行计数器+1,如果没满一页所占用的记录数,则 MoreData 设置成true,直到打满一页。
      

  2.   

    lynmison 
    我在OnNeedData写的代码为什么不触发?
    请你再说得详细点,谢谢
      

  3.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Spin, DB, QuickRpt, QRCtrls, ADODB, ExtCtrls;type
      TForm1 = class(TForm)
        QuickRep1: TQuickRep;
        adsEmployee: TADODataSet;
        TitleBand1: TQRBand;
        ColumnHeaderBand1: TQRBand;
        DetailBand1: TQRBand;
        QRLabel1: TQRLabel;
        QRLabel2: TQRLabel;
        adsEmployeeEmployeeID: TAutoIncField;
        adsEmployeeLastName: TWideStringField;
        adsEmployeeFirstName: TWideStringField;
        adsEmployeeTitle: TWideStringField;
        adsEmployeeTitleOfCourtesy: TWideStringField;
        adsEmployeeBirthDate: TDateTimeField;
        adsEmployeeHireDate: TDateTimeField;
        adsEmployeeAddress: TWideStringField;
        adsEmployeeCity: TWideStringField;
        adsEmployeeRegion: TWideStringField;
        adsEmployeePostalCode: TWideStringField;
        adsEmployeeCountry: TWideStringField;
        adsEmployeeHomePhone: TWideStringField;
        adsEmployeeExtension: TWideStringField;
        adsEmployeePhoto: TBlobField;
        adsEmployeeNotes: TMemoField;
        adsEmployeeReportsTo: TIntegerField;
        adsEmployeePhotoPath: TWideStringField;
        QRLabel3: TQRLabel;
        QRLabel4: TQRLabel;
        lblId: TQRLabel;
        lblLastName: TQRLabel;
        lblFirstName: TQRLabel;
        btnPreview: TButton;
        sePageRow: TSpinEdit;
        QRLabel5: TQRLabel;
        lblIndex: TQRLabel;
        procedure btnPreviewClick(Sender: TObject);
        procedure QuickRep1StartPage(Sender: TCustomQuickRep);
        procedure QuickRep1NeedData(Sender: TObject; var MoreData: Boolean);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}var
      rowIndex: integer;procedure TForm1.btnPreviewClick(Sender: TObject);
    begin
      adsEmployee.First;
      QuickRep1.Preview;
    end;procedure TForm1.QuickRep1StartPage(Sender: TCustomQuickRep);
    begin
      rowIndex := 0;
    end;procedure TForm1.QuickRep1NeedData(Sender: TObject; var MoreData: Boolean);
    begin
      if not adsEmployee.Eof then
      begin
        Inc(rowIndex);
        lblId.Caption := adsEmployee.FieldByName('EmployeeID').AsString;
        lblLastName.Caption := adsEmployee.FieldByName('LastName').AsString;
        lblFirstName.Caption := adsEmployee.FieldByName('FirstName').AsString;
        lblIndex.Caption := IntToStr(rowIndex);
        adsEmployee.Next;
        MoreData := true;
      end
      else begin
        if (rowIndex=0) or (rowIndex=sePageRow.Value) then
        begin
          MoreData := false;
        end
        else begin
          Inc(rowIndex);
          lblId.Caption := '';
          lblLastName.Caption := '';
          lblFirstName.Caption := '';
          lblIndex.Caption := IntToStr(rowIndex);
          MoreData := true;
        end;
      end;
      if rowIndex>=sePageRow.Value then QuickRep1.NewPage;
    end;end.