fastreport分页和空行填充问题? ( 积分: 100 )

  • 主题发起人 主题发起人 willing66
  • 开始时间 开始时间
W

willing66

Unregistered / Unconfirmed
GUEST, unregistred user!
我用的fastreport是3.07版的,
我在处理时,分页和空行填充是这样的:
var
PageLine: integer;
//在現在頁列印到第幾行
PageMaxRow: integer=15;
//設定每頁列數
procedure DetailData1OnBeforePrint(Sender: TfrxComponent);
begin
PageLine := <line> mod PageMaxRow;
if (PageLine = 1) and (<line> > 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 < PageMaxRowdo
begin
i := i + 1;
Engine.ShowBand(DetailData1);
//印空白表格DetailData1是明细数据控件
end;
end;
每页15行,不到15行时自动填充空行,但是报表程序一运行,程序就退出了,分页我单独试了,可以正常运行。但是空行填充加进去就会出现这个问题。
 
我用的fastreport是3.07版的,
我在处理时,分页和空行填充是这样的:
var
PageLine: integer;
//在現在頁列印到第幾行
PageMaxRow: integer=15;
//設定每頁列數
procedure DetailData1OnBeforePrint(Sender: TfrxComponent);
begin
PageLine := <line> mod PageMaxRow;
if (PageLine = 1) and (<line> > 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 < PageMaxRowdo
begin
i := i + 1;
Engine.ShowBand(DetailData1);
//印空白表格DetailData1是明细数据控件
end;
end;
每页15行,不到15行时自动填充空行,但是报表程序一运行,程序就退出了,分页我单独试了,可以正常运行。但是空行填充加进去就会出现这个问题。
 
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.
 
lollman,
我的报表是与数据源关联好了,你的也不会自动填充空行呀
 
这样做,我的每一行是相同的记录
 
还是做不到自动填充空行的作用,能做到分页,你帮我说一下这些是什么意思吗,我的程序又错在什么地方
 
看下面的贴子吧:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3195974
 
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;
 
谢谢各位,我做出来了,我的做法是这样的,如果大家还有更好的做法可以发给我的,我的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;
 
试试以下这种写法,我以前用的
begin
IF COUNT(MASTERDATA1)=16 then
begin
FOR I:=0 TO 15do
SHOWBAND(CHILD1);
EXIT;
end;
IF COUNT(MASTERDATA1)<16 then
begin
FOR I:=COUNT(MASTERDATA1) TO 14do
SHOWBAND(CHILD1);
EXIT;
end;
I:=1;
WHILE (COUNT(MASTERDATA1)-16-17*I)>=0do
I:=I+1;
I:=I-1;
J:=COUNT(MASTERDATA1)-16-17*I;
{IF J=0 then
begin
FOR I:=0 TO 16do
SHOWBAND(CHILD1);
EXIT;
end;
IF J>0 then
begin
end;
}
FOR I:=J TO 15do
SHOWBAND(CHILD1);

{IF COUNT(MASTERDATA1)-16*(I-1)<15 then
begin
FOR I:=COUNT(MASTERDATA1)-16*(I-1) TO 15do
SHOWBAND(CHILD1);
end;
}
end
 
我上面给的链接不行吗?好象楼主这样写复杂了哦。
 
可以。我只是忘了去改对象了,
我现在还有一个问题就是文字垂直居中,我设置了字的VAlign为vaCenter,但是它却比vaTop还高,如果设置为vaBottom,就更高了,好像是设反了一样,有没有人帮忙一下呀
 
杩囨潵鐪嬬湅
 
真的太不小心了,一个非常小的问题害我弄了半天,为因我是直接与数据源关联,没有注意会有空格的问题,我的表也是varchar,但是得到的数据还是有空格。
希望大家在以后也能注意这个问题,不要跟我一样犯这个错。
 
谢谢大家的帮助。
 
谢谢大家的帮助。
 

Similar threads

I
回复
0
查看
529
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
516
import
I
后退
顶部