在实现多列报表时,为什么报表显示时总是少一行?(求救)(100分)

  • 主题发起人 主题发起人 haisie
  • 开始时间 开始时间
H

haisie

Unregistered / Unconfirmed
GUEST, unregistred user!
现在要实现一个Table1中Name项两栏打印,在窗口上放TquickReport组件 quickReport1,并在上面放Tband组件band1,将其BandType属性改为Detail,在Tband 组件上并排放两个QRLabel组件QRLabel1和QRLabel2,在quickReport1的OnNeedData事 件中写如下代码:

procedure TForm1.QuickRep1NeedData(Sender:
TObject;
var MoreData: Boolean);
var
I: integer;
begin

MoreData := True;
for I:= 1 to 2do

begin

if Table1.Eof then
Break;
case I of
1: QRLabel1.Caption :=
Table1.FieldByName('Name').AsString;
2: QRLabel2.Caption :=
Table1.FieldByName('Name').AsString;
end;

Table1.Next;
end;

if Table1.Eof then
MoreData := False;
end;

---- 为了保证打印或者打印预览开始时Table1指针在第一条记录,在quickReport1的 BeforePrint事件中写如下代码:

procedure TForm1.QuickRep1BeforePrint
(Sender: TCustomQuickRep;
var PrintReport: Boolean);
begin

Table1.First;
end;


---- 这样程序调用QuickRep1.Preview或者QuickRep1.Print便能预览或者打印到一个关于 Name的从左至右,从上到下的多栏报表。
程序表面上运行没什么问题,但在显示时总是少了最后一行,请各位大侠指点迷津
 
Table1.Eof then
Break;
“break" ,没来的操作就byebye 了,就在这里。
 
我在调试时发现Table遍历了所有记录,从程序流程上看不出什么问题,
只是在显示上少了一行,不知这两者之间有什么关联?
 
>>if Table1.Eof then
MoreData := False;
您的问题出在这儿,打印到最后一行时,你将MoreData设为False了!
所以会少一行,应该在开始时判断。
建议程序修改为:
procedure TQuickReport3.QuickReport3NeedData(Sender: TObject;
var MoreData: Boolean);
var
I: integer;
begin
if Form1.Table1.Eof then
MoreData := False
else
MoreData := True;
for I:= 1 to 2do
begin
case I of
1: begin
if Form1.Table1.Eof then
QRLabel1.Caption := ''
else
QRLabel1.Caption := Form1.Table1.FieldByName('Name').AsString;
end;
2: begin
if Form1.Table1.Eof then
QRLabel2.Caption := ''
else
QRLabel2.Caption := Form1.Table1.FieldByName('Name').AsString;
end;
end;
Form1.Table1.Next;
end;
end;
 
将代码放到Band1.BeforePrint下
 
接受答案了.
 
后退
顶部