如何对动态的报表进行换页呢?(100分)

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

csh88888

Unregistered / Unconfirmed
GUEST, unregistred user!
我用DELPHI5 的QREPORT部件进行开发,采用动态的增加TQRLABEL 和 TQRSHAPE
然后对QRLABEL进行赋值,全部的数据都放在detailband上当数据大于整页时,应如何换页呢?
麻烦大家帮小弟一下了。(分数不够再加)
 
没有做过吗?
麻烦大家了。
 
怎么不用QRDBTEXT?不用自己控制
 
我全部的数据的经过统计然后存在数组的,再根椐条件读出来的
 
用 QuickReport1.NewPage 可以换页,
至于什么时候换页,你可以定义两个窗体变量,一个记录每页要打印的总行数 PageRow,
另一个记录当前打印到的行数 CurrentRow,在QuickReport1.BeForePrint事件里对两个变量
赋初始值,
在OnNeedData事件里判断,当CurrentRow=PageRow时换页,并设CurrentRow=0,就行了
 
svw0506:
你好!
我用你的方法,是可以换页,但对于那些在第一页超出的数据,
怎么不能在新的一页显示出来呢?
 
用这种方法有以下几个方面要注意:
1、QuickReport控件不能连DataSet
2、显示明细数据的QrLabel放在DetailBand里
3、注意循环变量的赋值,比如换页后,页中当前行的值必须初始化
4、控件MoreData,为True时继续打印,为False不继续打印
下面我举个例子:
implementation
var
PageRowCount : Integer;
//每页能打印的总行数
CurrentRow : Integer;
//页中当前打印的行号
I : Integer;
//数组中用到的循环变量
{$R *.DFM}
{打印之前,对数据进行初始化}
procedure TForm1.QuickRep1BeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
begin
PageRowCount := 20;
//这个值要注意,不能太大,也不能太小
CurrentRow := 0;
I := 0;
end;

procedure TForm1.QuickRep1NeedData(Sender: TObject;
var MoreData: Boolean);
begin
//如果数据打印完成,不继续进行
if I = High(MyArray) then
begin
MoreData := False;
//不继续打印
Exit;
end;

MoreData := True;
//继续打印
{如果一页打满,换页继续打印}
if CurrentRow = PageRowCount then
begin
QuickRep1.NewPage;
//开始新页
CurrentRow := 0;
//对当前行变量初始化
end
else
{一页没打满,继续打印该页内容}
begin
QRLabel1.Caption := MyArray[0, I];
{打印第一项内容}
QRLabel2.Caption := MyArray[1, I];
{打印第二项内容}
// .....
end;

Inc(I);
//控制数组变量+1
Inc(CurrentRow);
//对当前行变量+1
end;

 
后退
顶部