fastreport,怎樣根据某一字段的值改變某一memo的值 ( 积分: 100 )

  • 主题发起人 主题发起人 shp1997
  • 开始时间 开始时间
S

shp1997

Unregistered / Unconfirmed
GUEST, unregistred user!
想向大家请教一下,在fastreport中数据库有一字段为boolean型,我想在报表中体现当其为true是显示“v”,否则为“×”,应如何处理。
另外报表中有一表格,一页上显示20条,如果数据库中有3条记录,则3条有内容其余空行,如何实现
 
给一个实现的完整例子(新版)
procedure TForm1.frxReport1BeforePrint(Sender: TfrxReportComponent);
var
emptypic,picpath:string;
begin
picpath:=ExtractFilePath(Application.ExeName)+ 'pic/'+
labelededit1.Text+'/'+adoquery1.FieldValues['bmh']+'.jpg';
emptypic:=ExtractFilePath(Application.ExeName)+ 'pic/'+
labelededit1.Text+'/00000000000000'+'.jpg';
if (sender is TFrxPictureView) and (sender.Name='Picture1') then
begin
with (sender as TFrxPictureView)do
if FileExists(picpath) then
Picture.LoadFromFile(picpath)
else
Picture.LoadFromFile(emptypic) ;
end;
end;

早期版本的fastreport则应该这样写
procedure TForm1.frReport1BeforePrint(Memo: TStringList;
View: TfrView);
begin
//加载照片
if View.Name = 'Picture2' then
if FileExists('photo/'+ado_dt1.FieldValues['bmh'] +'.jpg') then
TfrPictureView(View).Picture.LoadFromFile('photo/'+ado_dt1.FieldValues['bmh'] +'.jpg')
else
TfrPictureView(View).Picture.LoadFromFile('photo/1111111111.jpg')
end;
 
你只要把上面的例子中的Picture2改成memo1之类的就行,然后在memo中分别设成“v”和“×”
 
第一个问题已解决,很简单用[iff(dataset1."xx".'v','×')]
但是第二个问题还存在
 
如果只能3條數據,要實現下面的空行有兩種辦法
其一是在數據表中插入空記錄,如果不允許插入記錄,則插入為零的記錄
因為報表顯示時可以把零隱藏
另一個方法是用FR本身的Child和Footer

var
PageLine: integer;

PageMaxRow: integer=9;

procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
begin
PageLine := <line> mod PageMaxRow;
if (PageLine = 1) and (<line> > 1) then
begin
Engine.ShowBand(footer2);
Engine.newpage;
end;
end;

//Footer1 高度設為0
procedure Footer1OnBeforePrint(Sender: TfrxComponent);
var
i: integer;
begin
i := iif(PageLine=0, PageMaxRow, PageLine);
while i < PageMaxRowdo
begin
i := i + 1;
Engine.ShowBand(Child1);
//印空表格
end;

end;
 
问题解决了,谢谢大家
 
后退
顶部