放以下四个组件(FastReport4.0)
ColumnHeader1(用来显示标题的),
MasterData1(数据集dataSet1,有OnBeforePrint事件),
Child1(补空行用的,里面放空的Memo框跟MasterData1中的Memo对齐),
ColumnFooter1(用来显示页合计之类用的,有OnBeforePrint事件)
注:数据集dataSet1是通过:报表-->数据... 中选进来的。
//************************************代码部分**********************************
var
maxline: integer;//每页行数
f: boolean;
procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
var
lineNo1: integer;
begin
lineNo1:= (<line> -1) mod maxline;//
if (lineNo1 = 0) and (<line> <> 1) then
begin
f := false;
Engine.NewPage;
f := true;
end;
end;
procedure ColumnFooter1OnBeforePrint(Sender: TfrxComponent);
var
lineNo2: integer;
begin
lineNo2:= <line> mod maxline;
while f and (lineNo2 < maxline)do
begin
lineNo2 := lineNo2 + 1;
Engine.ShowBand(Child1);
end;
end;
begin
maxline :=6;
//每页行数
f := true;
end.
//************************************代码部分**********************************
以上代码可以实现:每页打印固定行,如果未页数小maxline,则补足到maxline行。
现有一个问题:就是页合计问题,如:数据集DataSet1,其中有一个money字段,现在要进行页小计,那么在ColumnFooter1中放一个Memo框,其计算公式为:[SUM(<DataSet1."money">,MasterData1)],如果当前页没有进行补空行,那么页小计是对的;如果有进行补空行的话,那么页小计显示为“空”。即:有进行补空行的页,页小计就不对;没进行补空行的页,页小计是对的。