QR的ONNeedData事件(50分)

  • 主题发起人 主题发起人 小八哥
  • 开始时间 开始时间

小八哥

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一数据库里面有姓名性别等字段,
姓名是存的中文,
性别字段是用1表示男,2表示女,
我在报表显示的时候需要转成文字,于是就用了下面的代码
procedure TForm3.QuickRep1NeedData(Sender: TObject;
var MoreData: Boolean);
begin

with Form1.HalcyonDataSet1do
begin
case FieldByName('XB').AsInteger of
1: QRLabel14.Caption := '男' ;
2: QRLabel14.Caption := '女' ;
else
QRLabel14.Caption := '' ;
end;
end;

Form1.HalcyonDataSet1.Next ;
MoreData := not Form1.HalcyonDataSet1.Eof ;
end;

发现报表显示出来的时候,直接就是第二位考生的姓名,
但性别字段是第一位考生的.
接下去的显示也是这个样子,不知道各位富翁有没有
遇到过这个情况,该如何解决?
 
not use onneeddata
you can use TQrLabel.OnPrint
case FieldByName('XB').AsInteger of
1: Value := '男' ;
2: Value := '女' ;
else
Value := '' ;
 
to realLearning
我改成这样
procedure TForm3.QRLabel14Print(sender: TObject;
var Value: String);
begin
with Form1.HalcyonDataSet1do
begin
case FieldByName('XB').AsInteger of
1: QRLabel14.Caption := '男' ;
2: QRLabel14.Caption := '女' ;
else
QRLabel14.Caption := '' ;
end;

ShowMessage('a');
end;

发现这个事件是被触发的,但QRLabel14的Caption没有改变.
 
to realLearning
上面说没改变是因为preview时没变,打印时
还是有效果的,但发生的也是同样的问题,纪录
仍然错位.
而且你这种方法在Preview时是行不通的.
 
不会的print和preview都会出发
procedure TForm3.QRLabel14Print(sender: TObject;
var Value: String);
begin
with Form1.HalcyonDataSet1do
begin
case FieldByName('XB').AsInteger of
1: Value := '男' ;
2: Value := '女' ;
else
Value := '' ;
end;
end;

不要写qrlabel的Caption 给value 赋值就可以
 
多谢realLearning,发现是可以了.
我还想问一下,
1)为什么在NeedData中我这样写会出现纪录错位的问题,
2)我在QR的OnPreview中加了一行代码
Form1.HalcyonDataSet1.First
发现连预览的窗口都出不来了,
OnPreview这个事件是不是在预览前触发的,为什么我这样
写不可以.
还愿大哥帮忙.
 
Form1.HalcyonDataSet1.First
這一句應該加在beforeprint
 
多谢大家了.
 
后退
顶部