使用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;

///

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

  1. MySql8.0.19最新版本创建用户分配权限演示,You have an error in your SQL syntax权限分配问题解决方法

    MySql 8.0.19 权限分配 问题一:You have an error in your SQL syntax ---语法问题 问题二:You are not allowed to create ...

  2. 【Android 安全】DEX 加密 ( 代理 Application 开发 | 加载 dex 文件 | 使用反射获取方法创建本应用的 dexElements | 各版本创建 dex 数组源码对比 )

    文章目录 一.不同 Android 系统创建 dex 数组源码对比 二.不同 Android 系统创建 dex 数组源码对比 三. Android 5.1 及以下系统反射方法并创建 Element[] ...

  3. apache 版本_Apache Hudi 0.5.1版本重磅发布

    历经大约3个月时间,Apache Hudi 社区终于发布了0.5.1版本,这是Apache Hudi发布的第二个Apache版本,该版本中一些关键点如下 版本升级 将Spark版本从2.1.0升级到2 ...

  4. 在Eclipse 2.0中使用版本控制系统CVS

    董向辉 (xianghui.dong@mail.ia.ac.cn) 2002 年 7 月 2002年6月28日,Eclipse 2.0正式版已经正式完成,这将是Java开发工具历史上的一个重要事件,E ...

  5. isfull mysql_Mysql8.0及以上版本,关于only_full_group_by的问题

    mysql8.0及以上版本,关于only_full_group_by的问题: ERROR 1055 (42000): Expression #7 of SELECT list is not in GR ...

  6. mysql8.0.20 64位安装教程_MySQL8.0.20压缩版本安装教程图文详解

    1.mysql下载地址: http://ftp.ntu.edu.tw/mysql/downloads/mysql-cluster-8.0/ 2.解压以后放在一个文件夹里面,创建my.ini配置文件: ...

  7. 配置的android版本,Android SDK配置(V3.0.0及以上版本)

    消息接收Receiver配置 创建消息接收Receiver,继承自com.alibaba.sdk.android.push.MessageReceiver,并在对应回调中添加业务处理逻辑,可参考以下代 ...

  8. IOS 实现自定义的导航栏背景以及自定义颜色的状态栏(支持7.0以及低版本)

    为尊重文章原作者,转载务必注明原文地址:http://www.cnblogs.com/wt616/p/3784717.html 先看效果图: 在自定义导航栏背景时,可能会遇到以下一些问题: 1.当设置 ...

  9. amh搭建php网站,AMH6.0发布 (免费版本) – AMH终于可以免费用了。

    喜闻AMH6.0发布 (免费版本) - AMH终于可以免费用了.虽然发布了免费版本,但是恐怕很多人再也回不去了. 之前也用过一阵子AMH,可惜收费劝退后,就再也没用过,不过不管如何,这也算给用户多一个 ...

最新文章

  1. 瞄准自然语言处理,百度与鹏城实验室共建实验室
  2. matplotlib 制作不等间距直方图
  3. 国产操作系统发展离不开人才和市场
  4. 是哪个app_互联网app创业哪个比较好
  5. 设置 cookie过期时间
  6. Bailian4136 矩形分割【差分】
  7. php模拟input 的file上传文件
  8. 第一个python程序-判断登陆用户名和密码是否正确
  9. SqlServer根据表中ID加序号
  10. java 10000以内的质数_10000以内的质数总表
  11. Java开发中存在这样的代码,反而影响整体整洁和可读性
  12. [HAL]STM32F1光照度测量BH1750 串口输出
  13. 数字化营销3大趋势:全域、全链路、全闭环
  14. PO_从PO追溯PR的方式和表(分析)
  15. js身份证号码带*号处理
  16. 端口号占用,查看端口号
  17. 教程:如何把公众号变成淘宝查券返利机器人
  18. c语言程序设计书店销售管理系统,C语言课程设计-书店管理系统
  19. VBA 数值-文本转换
  20. 想自己上线微信小程序一定要会代码?

热门文章

  1. hdu 1232 经典并查集应用
  2. addActionError addFieldErrot addActionMessage 的区别
  3. Ubuntu U盘终于见到了它的主人
  4. [转]Maintain Control State in ASP.NET 2.0
  5. 控制自己的贪念,提升自己的能力
  6. 问题十五:C++中抽象类,虚函数是什么鬼?怎么测试
  7. 程序控制流——Python基础语法
  8. sql文字转换全拼_Mysql中文汉字转拼音的实现(每个汉字转换全拼)
  9. Python编程 - 不调用相关choose库函数,“众数“挑选器、随机挑选器 的源码编程实现
  10. 极简主义︱利用apple机器学习平台Turicreate实现图像相似性检索(二)