当前位置: 首页 > news >正文

使用FastReport 3.0及以上版本创建动态报表的几个技巧(转)

使用FastReport 3.0及以上版本创建动态报表的几个技巧
2007年07月03日 星期二 09:18
2007年03月13日 星期二 16:20
1.已经生成的报表保存到流中,再从流中取出
    TfrxReport.PreviewPages.SaveToStream(TStream);
    TfrxReport.PreviewPages.LoadFromStream(TStream);

2.把变量添加到报表中
    with frxReport1 do
    begin
      with Variables do
      begin
        Category:=Add;
        Category.Name := ' ' + '自定义变量1';        //注意!!第一个' '内是一个空格!!如果没有空格,不能正确添加分类
        with Add do Name := ' ' + '自定义变量2';     //更简化的格式
        AddVariable('自定义变量1', '变量11', QuotedStr('大写金额'));
        AddVariable('自定义变量1', '变量12', QuotedStr('大写金额'));
        AddVariable('自定义变量1', '变量13', QuotedStr('大写金额'));
        AddVariable('自定义变量2', '变量21', 1880);
        AddVariable('自定义变量2', '变量22', QuotedStr('大写金额'));
        AddVariable('自定义变量2', '变量23', QuotedStr('大写金额'));
      end;
    end;

3.动态添加数据集,要注意!!!!!
在取报表格式之前,应该先把数据集对象放好,这样才能保证在报表控件在取格式文件后,
安置报表对象时,可以拿到数据对象,如果操作顺序搞反了,则报表对象就无法
拿到数据对象,在预览数据时,就会产生“没有数据集”的错误了!!
var
    tmpDataSet: T数据集;
    DataSource: TDataSource;
    frxDBDataSet: TfrxDBDataset;
begin
    tmpDataSet:=T数据集.Create(Self);
    DataSource:=TDataSource.Create(Self);
    frxDBDataSet:=TfrxDBDataset.Create(Self);

    DataSource.DataSet:=tmpDataSet;
    frxDBDataSet.DataSource:=DataSource;
    //frxDBDataSet.DataSet:=tmpDataSet;      //这条语句与上一条都可用,我也不知道区别在哪
    frxDBDataSet.UserName:='数据项名称';      //好用在于可以用中文名
    frxReport1.DataSets.Add(frxDBDataSet);
-------------注意:在把报表格式LoadFromFile或LoadFromStream之前,必须完成上面这几条语句的程序!!!!

4.将报表设置数据保存到流中,只要设置TfrxDesigner.OnSaveReport就可以了,但不知道这东西怎么和Report联接起来的,只需要在界面上放一个控件就OK了,怪怪的,不过挺爽
  
5.自定义预览窗口
    通过引用frxPreview来建立继承类TfrxPreview,然后在继承的类中加入自己的特性,这样是最省事的了

6.处理顺序的信条(真理):假设报表模板是保存在数据库中的
a.必须在把报表模板提取出来前,把表对象注入数据中,否则在预览时就知错
b.必须在在把报表模板提取出来后,再把动态变量加到报表中,否则看不到变量存在
这两个顺序必须当信条来理解,至于什么原因,偶还没空看FastReport的源程序咧,嘿嘿~~,这两个处理机制可是偶经过了N多失败之后才发现的哦

7.添加自定义函数
a.建立自己的函数,可以是类的成员函数(要注意实例化类哟),也可以是全局函数
b.用TfrxReport.AddFunction把函数加到注册项中,注意,必须是函数的完整定义,比如,你的函数是:
     function MyFunction(Para0: Float): string;
 那么AddFunction格式应该这样:
     frxReport1.AddFunction('function MyFunction(Para0: Float): string','自定义函数','');
c.必须在TfrxReport.OnUserFunction中对函数的返回值进行处理,否则在报表中即使写的格式正确,也没有返回值,这是必须注意的

8.在自定义函数中使用报表中的对象
a.建立自定义函数

function TForm1.GetCrossObject(CrossObj: TfrxCustomCrossView): string;
begin
    // 取数据对象
    Result:='行数:'+IntToStr(CrossObj.Matrix.RowCount);
end;

b.注册函数,可以在Form1.Create时注册哦

    with frxReport1 do
    begin
      AddFunction('function GetCrossObject(CrossObj: TfrxCustomCrossView): String',
        '扩展函数', '');
    end;

c.必须在TfrxReport.OnUserFunction中对函数的返回值进行处理

function TForm1.frxReport1UserFunction(const MethodName: String;
    var Params: Variant): Variant;
begin
    if UpperCase(MethodName)=UpperCase('GetCrossObject') then
      Result:=GetCrossObject(TfrxCustomCrossView(Integer(Params[0])));    //类型转换才能编译通过哦  
end;

///

 

 

http://www.xdnf.cn/news/854191.html

相关文章:

  • 分享62个ASP江湖论坛源码,总有一款适合您
  • VMware安装+导入虚拟机+软件更新 教程
  • 如何卸载IE9?
  • delphi outlook发送邮件
  • red5流媒体服务器网站,[RED5]red5流媒体服务器(开源免费)的安装方法
  • 2021-06-07
  • iOS游戏安全之IPA破解原理及防御
  • 最详细的***教程
  • soso地图api接口地理解析geocoder检索示例----并在信息框显示经纬度
  • 钩子(hook)编程
  • BoundsChecker使用说明
  • 即时通讯音视频开发(十八):详解音频编解码的原理、演进和应用选型
  • android 加密手机功能,怎么为安卓手机加密
  • 【网络安全入门】学习网络安全必须知道的100 个网络基础知识_网络安全知识入门基础_网络安全基础知识
  • 电脑重装系统后会怎样?
  • 启动应用程序出现autoconv.exe找不到问题解决
  • 硬盘检测工具哪个好?5款硬盘工具对比测试
  • 《MySQL高级篇》四、索引的存储结构
  • Linux中搭建Apache服务器
  • 【每天学习一点新知识】sqlmap的使用
  • Android游戏开发大全
  • 51nod-1437 迈克步(单调栈)
  • IT运维工具推荐
  • 爱是一种遇见
  • windows XP中的IE6.0修复方法
  • 【转帖】源的添加管理和Cydia使用教程
  • windows下Npoint虚拟主机安装配置及心得
  • 万能DOS启动盘制作全攻略!(软盘+光盘+U盘+硬盘+NTFS+应急实用工具)
  • 如果找活跃IP段!抓肉鸡必须的!
  • 超级玛丽全通关图文攻略