当前位置:主页>仓库管理软件> 列表

fastreport分页和空行填充问题?

记账软件版1楼: 我用的fastreport是3.07版的,
我在处理时,分页和空行填充是这样的:
var
PageLine: integer; //在現在頁列印到第幾行
PageMaxRow: integer=15; //設定每頁列數

procedure DetailData1OnBeforePrint(Sender: TfrxComponent);
begin
PageLine := mod PageMaxRow;
if (PageLine = 1) and ( > 1) then
Engine.newpage;
end;

procedure PageFooter1OnBeforePrint(Sender: TfrxComponent);
var
i: integer;
begin
i := iif(PageLine=0, PageMaxRow, PageLine);
if i=0 then
exit;
while i < PageMaxRow do begin
i := i + 1;
Engine.ShowBand(DetailData1); //印空白表格DetailData1是明细数据控件
end;
end;
每页15行,不到15行时自动填充空行,但是报表程序一运行,程序就退出了,分页我单独试了,可以正常运行。但是空行填充加进去就会出现这个问题。

2楼: var
aa:Integer;
maxRow:Integer;
procedure Page1OnManualBuild(Sender: TfrxComponent);
var
DataSet: TfrxDataSet;
begin
aa:=1;
DataSet := MasterData1.DataSet;


DataSet.First;
while (not DataSet.Eof) or ((aa-1) mod MaxRow<>0) do
begin
if DataSet.Eof then Engine.ShowBand(Child1)
else Engine.ShowBand(MasterData1);
DataSet.Next;
aa:=aa+1;
if (((aa-1) mod (MaxRow)=0) and (not DataSet.Eof)) then EngIne.Newpage;
end;
end;

begin
maxRow:=15; //每页最大行数
end. 如库存软件

3楼: lollman,
我的报表是与数据源关联好了,你的也不会自动填充空行呀

4楼: 这样做,我的每一行是相同的记录

5楼: 还是做不到自动填充空行的作用,能做到分页,你帮我说一下这些是什么意思吗,我的程序又错在什么地方

6楼: 看下面的贴子吧:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3195974

记账软件版7楼: lollman,
我的报表是与数据源关联好了,修改了一下,会自动填充行,但是填充的都是最后一行,且都相同,有数据,我要的是空行没数据的。有没有办法呀?

var
PageLine: integer; //在現在頁列印到第幾行
PageMaxRow: integer=15; //設定每頁列數


procedure Page1OnManualBuild(Sender: TfrxComponent);
var
DataSet: TfrxDataSet;
begin
PageLine:=1;
DataSet := DetailData1.DataSet;
// DataSet.First;
while (not DataSet.Eof) or ((PageLine-1) mod PageMaxRow<>0) do
begin
PageLine:=PageLine+1;
if DataSet.Eof then
begin
Memo16.lines.clear; //:='''';
Memo18.lines.clear; //:='''';
Memo19.lines.clear; //:='''';
Memo20.lines.clear; //:='''';
Memo21.lines.clear; //:='''';
Memo22.text:='''';
Engine.ShowBand(DetailData1);
continue;
end
else
begin
Engine.ShowBand(DetailData1);
DataSet.Next;
end;
if (((PageLine-1) mod (PageMaxRow)=0) and (not DataSet.Eof)) then
EngIne.Newpage;
end;
end;

8楼: 谢谢各位,我做出来了,我的做法是这样的,如果大家还有更好的做法可以发给我的,我的E-mail:willing66@163.com

var
PageLine: integer; //在現在頁列印到第幾行
PageMaxRow: integer=15; //設定每頁列數
procedure Page1OnManualBuild(Sender: TfrxComponent);
var
DataSet: TfrxDataSet;
begin
PageLine:=1;
DataSet := DetailData1.DataSet;
// DataSet.First;
while (not DataSet.Eof) or ((PageLine-1) mod PageMaxRow<>0) do
begin
PageLine:=PageLine+1;
if DataSet.Eof then
begin
//DataSet.close;
//Memo16.lines.clear; //:='''';
//Memo18.lines.clear; //:='''';
//Memo19.lines.clear; //:='''';
//Memo20.lines.clear; //:='''';
//Memo21.lines.clear; //:='''';
//Memo22.lines.clear; //:='''';
Engine.ShowBand(SubdetailData1);
continue;
end
else
begin
Engine.ShowBand(DetailData1);
DataSet.Next;
end;
if (((PageLine-1) mod (PageMaxRow)=0) and (not DataSet.Eof)) then
EngIne.Newpage;
end;
end;

9楼: 试试以下这种写法,我以前用的
begin
IF COUNT(MASTERDATA1)=16 THEN


BEGIN
FOR I:=0 TO 15 DO
SHOWBAND(CHILD1);
EXIT;
END;
IF COUNT(MASTERDATA1)<16 THEN
BEGIN
FOR I:=COUNT(MASTERDATA1) TO 14 DO
SHOWBAND(CHILD1);
EXIT;
END;
I:=1;
WHILE (COUNT(MASTERDATA1)-16-17*I)>=0 DO
I:=I+1;
I:=I-1;
J:=COUNT(MASTERDATA1)-16-17*I;
{IF J=0 THEN
BEGIN
FOR I:=0 TO 16 DO
SHOWBAND(CHILD1);
EXIT;
END;
IF J>0 THEN
BEGIN
END; }
FOR I:=J TO 15 DO
SHOWBAND(CHILD1);


{IF COUNT(MASTERDATA1)-16*(I-1)<15 THEN
BEGIN
FOR I:=COUNT(MASTERDATA1)-16*(I-1) TO 15 DO
SHOWBAND(CHILD1);
END; }

end

10楼: 我上面给的链接不行吗?好象楼主这样写复杂了哦。

11楼: 可以。我只是忘了去改对象了,
我现在还有一个问题就是文字垂直居中,我设置了字的VAlign为vaCenter,但是它却比vaTop还高,如果设置为vaBottom,就更高了,好像是设反了一样,有没有人帮忙一下呀

12楼: 杩囨潵鐪嬬湅 如库房管理软件

13楼: 真的太不小心了,一个非常小的问题害我弄了半天,为因我是直接与数据源关联,没有注意会有空格的问题,我的表也是varchar,但是得到的数据还是有空格。
希望大家在以后也能注意这个问题,不要跟我一样犯这个错。

记账软件版14楼: 谢谢大家的帮助。

15楼: 谢谢大家的帮助。