即固定显示4行(或任意行的空格),而不是根据数据的多少而显示多少行,我知道有一种叫显示子报表的可以把行数填满,可是我这个软件不需要填满空白的纸,只需要打四行就够了,而且数据也不会超出四行的,最多就是四行,超出就要另开一张收据了。
请知道的朋友指点一下,谢谢。

解决方案 »

  1.   

    用Child补空行,不过要写点代码procedure MasterData1OnAfterPrint(Sender: TfrxComponent);
    var
      i: Integer;
    begin  
     if (<Line>=MasterData1.DataSet.RecordCount) then
      begin
        if ((<Line> Mod 4)<>0) then
        begin
          for i:=1 to 4-(<Line> Mod 4) do
            Engine.ShowBand(Child1);
        end;
      end;
    end;procedure ColumnFooter1OnBeforePrint(Sender: TfrxComponent);
    var
      i: Integer;
    begin
        if MasterData1.DataSet.RecordCount=0 then
          for i:=1 to 4 do
            Engine.ShowBand(Child1);
    end;
      

  2.   

    表格全画,不用Fastreport的数据集就可以完成。用数据就不知道如何完成了!
      

  3.   

    如果只有4行的话,用这个简单的方法也可以的:
    1\把报表设计好,不要放任何band,设置好左右纸张大小、边界等就可以了。
    2\在打印时,把整理好的数据,用循环写入报表,再打印就可以了。
    self.frxReport1.LoadFromFile('reports\收款收据.fr3');
    self.adoquery1.first;
    while not self.adoquery1.eof do begin
    if self.adoquery1.recno()=1 then begin
    TfrxMemoView(frxReport1.FindObject('Memo11')).Memo.Text:=self.adoquery1.fieldbyname('名称').asstring;
    TfrxMemoView(frxReport1.FindObject('Memo12')).Memo.Text:=self.adoquery1.fieldbyname('单位').asstring;
    ......
    end;
    if self.adoquery1.recno()=2 then begin
    TfrxMemoView(frxReport1.FindObject('Memo21')).Memo.Text:=self.adoquery1.fieldbyname('名称').asstring;
    TfrxMemoView(frxReport1.FindObject('Memo22')).Memo.Text:=self.adoquery1.fieldbyname('单位').asstring;
    ......end;
    ........self.adoquery1.next;
    end;
    self.frxReport1.ShowReport;手写的,没有测试,有错误请谅解。我打印一些不规则的表,或一张单据需要从多个表中提取数据的,而且位置都是交差的就用这招,挺好用的。