我要在报表上左右两边实现qrdetail的功能,但又是连接不同的dataset的?请问改怎么办呢?

解决方案 »

  1.   

    我认为如果不是主细表结构,那就用代码实现一个QRTabel,QRDBText的实现
    比如:
    var myQrl:TQRlabel;
    while not ADowuye.Eof do
      begin
        rm:=ADowuye.fieldbyname('unitno').AsString ;
        str:=ADowuye.fieldbyname('rmno').AsString ;
        roomno:=ADowuye.fieldbyname('roomno').AsString;
        MyQrl:=TQRlabel.Create(self);
        MyQrl.Parent :=QRband11;
        MyQrl.name :='R'+rm+'_'+str;
        MyQrl.Caption :=str;
        Orientation(rm,str,MyQrl);
        if ADowuye.FieldByName('Isfinish').AsString ='0' then
          myqrl.Font.Style:=[]
        else
          myqrl.Font.Style :=[fsBold,fsItalic,fsUnderline,fsStrikeOut];
        ADowuye.Next;
      end;
    这样用循环写完它
      

  2.   

    看不明白!
       不是明细表 我只是想在qrdetail里显示两个不同table的字段列,就样子。但qrdetail只能连一个dataset、、、、、
      

  3.   

    实现同一项目的多栏打印,技术关键是如何控制表中记录提取个数,如果在Treport的DataSet属性中选定一个Table,那么QuickReport每次打印详细列表(BandType=rbDetail)属性的TQRBand时,系统会自动取出一个记录供打印,并将表中的记录指针移到下一位,这样程序无法控制表中记录指针的移动,就无法实现多栏打印,只要程序不在Treport的DataSet属性选定任何表, QuickReport便不会控制表记录的提取,QuickReport特为其它类型数据打印提供了一个OnNeedData事件,QuickReport 每次打印详细列表(BandType=rbDetail)属性的TQRBand时,会触发这个事件,要求提供打印数据,如果程序在OnNeedData事件中编写运用表中数据提供打印资料,便能实现多栏打印,现举例说明: 
           现在要实现一个Table1中Name项两栏打印,在窗口上放TquickReport组件 quickReport1,并在上面放Tband组件band1,将其BandType属性改为Detail,在Tband 组件上并排放两个QRLabel组件QRLabel1和QRLabel2,在quickReport1的OnNeedData事件中写如下代码: 
         
         procedure TForm1.QuickRep1NeedData(Sender: 
         TObject; var MoreData: Boolean); 
         var 
           I: integer; 
         begin 
           MoreData := True; 
           for I:= 1 to 2 do 
           begin 
            if Table1.Eof then Break; 
            case I of 
            1: QRLabel1.Caption := 
         Table1.FieldByName('Name').AsString; 
            2: QRLabel2.Caption := 
         Table1.FieldByName('Name').AsString; 
            end; 
            Table1.Next; 
           end; 
           if Table1.Eof then MoreData := False; 
         end; 
           为了保证打印或者打印预览开始时Table1指针在第一条记录,在quickReport1的 BeforePrint事件中写如下代码: 
         procedure TForm1.QuickRep1BeforePrint 
         (Sender: TCustomQuickRep; 
           var PrintReport: Boolean); 
         begin 
           Table1.First; 
         end; 
         
           这样程序调用QuickRep1.Preview或者QuickRep1.Print便能预览或者打印到一个关于 Name的从左至右,从上到下的多栏报表。