fast report 报表怎样打印空白行 ( 积分: 100 )

  • 主题发起人 主题发起人 CB8u8
  • 开始时间 开始时间
C

CB8u8

Unregistered / Unconfirmed
GUEST, unregistred user!
我在打印一个单据时,每页打印10行当行数不够时怎样用空白行补充?
 
我在打印一个单据时,每页打印10行当行数不够时怎样用空白行补充?
 
newpage
直接换页
 
讲得不够清楚
当不足10行时怎样用空白行补充?
 
在Masterfooter后拉一个Childband,再在上面相应放几个空memo,跟MasterData band上的
memo上下对齐。

在Masterfooter的OnbeforePrint中键入:
begin
while FreeSpace > 10 do
ShowBand(Child1)
end
 
app2001的想法在3.0版本中有效,但在2.5中没有效.
 
to:来自:app2001, 时间:2005-9-8 9:49:06, ID:3196002
两个问题想问你
1、“再在上面相应放几个空memo”如果每页我固定打10行,是不是放10个空memo?
2、“ while FreeSpace > 10 do”这一行是否应该改为:while FreeSpace < 10 do ?
 
稍微改动一下[app2001]
在Masterfooter后拉一个Childband,Name 为Child1。再在上面相应放几个空memo,使ChildBand的高度和Memo的高度相等,跟MasterData band上的memo上下对齐。再放一个PageFoot。

在PageFoot的OnbeforePrint中键入:
begin
while freespace >=Childband 中 Memo 的高度 do
begin
showband(child1);
end;
end
版本为2.5的没问题 我一直在用
 
修正appe2001的想法
var
PageLine: integer; //在現在頁列印到第幾行
PageMaxRow: integer=15; //設定每頁列數

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

//Footer1高度設為0

procedure Footer1OnBeforePrint(Sender: TfrxComponent);
var
i: integer;
begin
i := iif(PageLine=0, PageMaxRow, PageLine);
while i < PageMaxRow do begin
i := i + 1;
Engine.ShowBand(Child1); //印空白表格
end;
end;

begin
end.
 
ldq-11的方法正解而且简单
 
其实我给的就是FR2.5中DEMO的例子,就在
/FastReport/Demos/reports中的第42个报表中,你可去看一下的
 
非常感谢各位,我用的就是2.5版本
 
那每页只打10行怎么解决?
 
如果是只打10行就强制分页的话,你可参考下这个资料的
手工设计fast reprot方法
报表窗口如下
frdbdataset1 fr数据源 dataset设置为要显示的数据集
frreport1 fr报表
报表的的设计如下
band1,报表标题
band2,主项数据无数据源 
band3,主项数据 数据源为frdbdataset1
band4,栏目脚,用于显示合计数据
band5,子栏  ,用于不足行时补写空白行


procedure TForm1.frReport1ManualBuild(Sender: TfrPage);
//在frreport1中的onmanualbuild事件中手工设置报表项
var
i, j,k: Integer;
begin

k:=trunc(frdbdataset1.DataSet.RecordCount/6);
            //每页显示8行(行数可用变量),计算页数
Sender.ShowBandByType(btReportTitle); //显示报表标题
for i := 0 to k do //循环打印每页
begin
Sender.ShowBandByName('Band2');
       //显示列头 (band2是一个主项数据,无数据源)
for j := 1 to 6 do //循环打印每行
begin
if not frdbdataset1.Eof then
begin
Sender.ShowBandByName('Band3');
      //显示主项数据 (band3是主项数据,数据源为frdbdataset1)
frdbdataset1.Next; //显示下一条数据
end
else
sender.ShowBandByName('band5'); //显示空白行 (band5为child band)
end ;
//在实际的页面设计当中此处有一个栏目脚band 以显示合计
if i <> k then
Sender.NewPage; //产生新页面
end;
end;
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
915
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部