有谁可以以下面的方式实现分页?(200分)

  • 主题发起人 主题发起人 lihao_nx
  • 开始时间 开始时间
L

lihao_nx

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure test;
var
myqr:TQRLABEL;
i,j:integer;
begin
i:=0;
j:=0;
adoquery1.close;
adoquery1.sql.clear;
adoquery1.sql.add('select * from test');
adoquery1.open;
while not adoquery1.eofdo

begin
if j>=20 then
begin
j:=0;
i:=0;
QuickRep1.NewPage;//分页
end;
MyQr:=TQRLabel.Create(self);
MyQr.Parent :=summ3;
MyQr.name :='Q'+adoquery1.fieldbyname('id').asstring;
MyQr.Top:=i;
MyQr.Left:=34;
MyQr.Width :=26;
MyQr.Height :=17;
MyQr.Caption:=adoquery1.fieldbyname('name').asstring;
i:=i+20;
inc(j);
adoquery1.next;
end;
 
这个最好是断开与QR连接的数据库控件,然后在ONNEEDDATA中写事件,应该可以解决的,你可以访问一下,www.qusoft.com上有介绍
 
可以设置小的纸张呀!也可采用其它报表控件呀。
当然这种方式也可以,只是麻烦了点[:)]
 
我知道那个onNeedData中,可是因为我的数据比较复杂,并且还有其它的一些规则,有那种办法好象不现实,最好是按我的那种想法或差不多的想法
 
我试过一下,好像使用以上方式会产生错误。
如果数据不是来自TQuery中,而是来自某一个表格型的控件,比如TListView中,使用以上方式将TListView中的数据显示在报表中,倘若数据行数多,如何实现自动分页?
不知道是否有大虾能解决。
 
这个你参考一下?
先声明一个变量
var
TempName : string;
调用报表预览
procedure TForm1.Button1Click(Sender: TObject);
begin
query1.Close;
query1.Open;
TempName := query1.fieldbyname('name').AsString;
QuickRep1.Preview;
end;

调用DetailBand的BeforePrint方法
procedure TForm1.DetailBand1BeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean);
begin
if Query1.FieldByName('Name').AsString <>TempName then
begin
quickrep1.NewColumn;
tempname := query1.fieldbyname('name').Asstring;
end;
end;
 
一个很笨的办法,但是完全可以实现你的要求。
代码生成TStringBand,在上面你所需要的位置生成标签,你想要什么样的都能做出来。
 
不解决了
 

Similar threads

I
回复
0
查看
860
import
I
I
回复
0
查看
570
import
I
I
回复
0
查看
788
import
I
I
回复
0
查看
2K
import
I
后退
顶部