|姓名|年龄|..._________________________|
|____|____|____________________________|
|____|____|____________________________|
请问我实现以上表格(固定共有6行),在quickreport里如果在detail里加入数据连接控件,那么所能实现的是数据集里有2行数据那么就只能打出2行数据和表格,有3个数据打三行,如何实现不管动态的数据是几行,表格固定是6行,不足6行数据就空几行,超过行就分页.如果将表格画好,静态是可以,那么动态显示数据就不行,请问如何解决,谢谢!!!

解决方案 »

  1.   

    先画好表格,通过QR的ON NEED DATA事件与DETAILBAND的AFTER PRINT
    事件结合即可实现你的目的
      

  2.   


            inc(i);//i是一個全局變量 
    //qr不要設置dataset(即為空),BeforePrin裡面dataset.first;//設置為第一記錄
    //在onneeddata裡面,
    //因為以前搞過,都過了比較久了,你試試看看行不行
            if not ADOQuery1.Eof then
            begin
                    QRLabel2.Caption:=ADOQuery1.Fields[1].AsString;
                    QRLabel3.Caption:=ADOQuery1.FieldByName('SL').AsString;//+ADOQuery1.FieldByName('DW').AsString;
                    ADOQuery1.Next;                if i<=20 then
                    MoreData:=true
                    else
                    begin
                    QuickRep1.NewColumn;
                    i:=0;
                    MoreData:=true;
                    end;
            end
            else
            begin
                    QRLabel2.Caption:='';
                    QRLabel3.CaptioN:='';                if i=20 then
                    MoreData:=false;
            end;
     心上代码仅供参考
      

  3.   

    不行,再说quickrep1.newcolumn好象是加新列的意思,我是要加行呀.MoreData又是什么意思?
    固定的表格画好,那数据肯定不能放在detail里面了,不然动态数据生成,表格肯定变形,是不是有添加空记录的方法实现确定表格为6行
      

  4.   

    如果你的格式是固定的,那么是可以的,如不固定则要动态
    生成表格;quickrep1.newcolumn是换页,MOREDATA是
    QR的参数,你在QR的事件中找找,这种问题我早就解决了。
      

  5.   

    就是用心上代码。MORE DATA是用来控制QR是否还有数据的参数
      

  6.   

    不行,我现在只好用添加空记录的方法了,判断 adoquery1.recordcount mod 6 <>0 做for 循环加空记录,这样就是太麻烦,而且违反了程序设计思路,但没办法呀,只有用这种笨方法保证打印出来的是6条记录.
    还有分页问题:
    我在quickreport的onneeddata事件里写的
    procedure Tqrep.QuickRep1NeedData(Sender: TObject; var MoreData: Boolean);
    begin
     if dm1.q_tempsell.RecordCount>=6 then
     quickrep1.Printer.NewPage
    end;
    不起作用啊,当我输入大于6条记录时,在打印预览里看到的还是一页显示啊
      

  7.   

    我在quickreport的onneeddata事件里写的
    procedure Tqrep.QuickRep1NeedData(Sender: TObject; var MoreData: Boolean);
    begin
     if dm1.q_tempsell.RecordCount>=6 then
     quickrep1.Printer.NewPage
    end;
    不起作用啊,当我输入大于6条记录时,在打印预览里看到的还是一页显示啊