如何分页(50分)

  • 主题发起人 主题发起人 scu006
  • 开始时间 开始时间
S

scu006

Unregistered / Unconfirmed
GUEST, unregistred user!
FastReport3.18 做报表时,如何用程序控制分页的问题
 
问题: fastreport分页和空行填充问题? ( 积分: 100 )
分类: 报表/统计图形

来自: willing66, 时间: 2005-09-27 18:18:00, ID: 3221047
我用的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行时自动填充空行,但是报表程序一运行,程序就退出了,分页我单独试了,可以正常运行。但是空行填充加进去就会出现这个问题。

来自: lollman, 时间: 2005-09-27 18:28:18, ID: 3221054
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.


来自: willing66, 时间: 2005-09-27 20:03:07, ID: 3221121
lollman,
我的报表是与数据源关联好了,你的也不会自动填充空行呀

来自: willing66, 时间: 2005-09-27 20:06:03, ID: 3221123
这样做,我的每一行是相同的记录

来自: willing66, 时间: 2005-09-27 20:22:33, ID: 3221132
还是做不到自动填充空行的作用,能做到分页,你帮我说一下这些是什么意思吗,我的程序又错在什么地方

来自: hongxing_dl, 时间: 2005-09-27 21:39:45, ID: 3221158
看下面的贴子吧:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3195974

来自: willing66, 时间: 2005-09-28 8:12:59, ID: 3221261
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;


来自: willing66, 时间: 2005-09-28 8:46:13, ID: 3221290
谢谢各位,我做出来了,我的做法是这样的,如果大家还有更好的做法可以发给我的,我的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;


来自: zhengmw, 时间: 2005-09-28 9:03:43, ID: 3221310
试试以下这种写法,我以前用的
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

来自: hongxing_dl, 时间: 2005-09-28 9:51:51, ID: 3221394
我上面给的链接不行吗?好象楼主这样写复杂了哦。

来自: willing66, 时间: 2005-09-28 12:00:42, ID: 3221626
可以。我只是忘了去改对象了,
我现在还有一个问题就是文字垂直居中,我设置了字的VAlign为vaCenter,但是它却比vaTop还高,如果设置为vaBottom,就更高了,好像是设反了一样,有没有人帮忙一下呀

来自: chinalog, 时间: 2005-09-28 12:54:17, ID: 3221678
杩囨潵鐪嬬湅

来自: willing66, 时间: 2005-09-28 16:41:42, ID: 3222071
真的太不小心了,一个非常小的问题害我弄了半天,为因我是直接与数据源关联,没有注意会有空格的问题,我的表也是varchar,但是得到的数据还是有空格。
希望大家在以后也能注意这个问题,不要跟我一样犯这个错。

来自: willing66, 时间: 2005-09-28 16:43:19, ID: 3222081
谢谢大家的帮助。

来自: willing66, 时间: 2005-09-28 16:44:02, ID: 3222084
谢谢大家的帮助。

得分大富翁: chinalog-5,hongxing_dl-20,lollman-50,zhengmw-25,
 
我想每页打印一条记录,比如有15条记录,就要有5页。应该怎么做,谢谢了
 
每页打印一条,15条怎么能打成5页呢?15页才对呀。
再说一楼的给出解了,要分页用Engine.newpage。这样还能防止表格混乱。
 
我知道该怎么做了,谢谢2位的参与
 
后退
顶部