我使用fastreport打印stringgrid中的数据,stringgrid的第0列显示的项目代码,通常情况下相同的项目代码只显示一次,如果一个项目在一页没有显示完,那么在下一页显示的第一行要显示该项目的代码。显示另一个项目时要重新换页,即强制换页,请问如何实现?
项目代码 项目名称 ----- 备注
1 abc --- 第一条记录
abc ------ 第2条记录
abc ----------第3条记录
---------------------------------------//下一页数据
1 abc ------ 第4条记录
abc ------ 第5条记录
abc ----------第6条记录
abc ------ 第7条记录
abc ----------第8条记录
下面要显示的是第2个项目所以要强制换页
2 ddd ----- 第一条记录
问题:
1,如何在每一页的第一行的项目代码显示该项目的代码。
2、在哪个事件中强制分页?
请各位高手帮忙
项目代码 项目名称 ----- 备注
1 abc --- 第一条记录
abc ------ 第2条记录
abc ----------第3条记录
---------------------------------------//下一页数据
1 abc ------ 第4条记录
abc ------ 第5条记录
abc ----------第6条记录
abc ------ 第7条记录
abc ----------第8条记录
下面要显示的是第2个项目所以要强制换页
2 ddd ----- 第一条记录
问题:
1,如何在每一页的第一行的项目代码显示该项目的代码。
2、在哪个事件中强制分页?
请各位高手帮忙
2、MASTERBAND的BEFOREPRINT事件中分页
报表窗口如下
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/8);
//每页显示8行(行数可用变量),计算页数
Sender.ShowBandByType(btReportTitle); //显示报表标题
for i := 0 to k do //循环打印每页
begin
Sender.ShowBandByName('Band2');
//显示列头 (band2是一个主项数据,无数据源)
for j := 1 to 8 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;
fastrep1.NewPage; //产生新页面可參考你的程式,應該寫在
DetailBand1BeforePrint事件
里可以。哈哈