之前说起过FastReport.NET这款报表工具的使用,但当时主要是从程序的角度,示例了在B/S架构下的相关使用,但报表终归还是要划到设计的范畴里来,毕竟能够将报表的内容展示在客户的眼前,这才是报表的根本目的,而诸如打印、转换格式个人觉得应该算是锦上添花的功能吧。

  而随着报表设计的复杂,问题自然也就增多了,没办法,硬着头皮上官网下点文档吧。

  这里将遇到的一些小问题汇总如下,自己做个记录,需要的朋友也可以省点“阅读理解”的时间哈。。。

 

  一、页面设置

  情景:FastReport设计器页面默认设置为A4纸,但如果需要显示的字段过多,这时就出现了页面的大小无法满足完整显示所需内容的问题。

  解决:出现这个问题后,我们可以在来到"文件"—"页面设置"选项中进行设置,在这里可以直接调整页面的纸 张类型和尺寸,但是我使用的时候更多的会调整Portrait为Landscape,所谓Portrait按词霸的翻译就是“纸短的一边在顶端和底端的打 印方式”,而Landscape则恰恰相反,意思是“纸长的一边在顶端和底端的打印方式”,可以简单的理解Portrait为纵向,Landscape为 横向,通过这样的调整既可以保证用标准的A4纸打印,又满足了设计时能够扩充纸张大小,保证显示内容的目的。

  

  

  二、过滤或排序显示数据

  情景:为了将数据按顺序显示,便于查看。

  解决:此时可以双击数据区,这时就会看到排序和过滤的选项,可以通过点击后面fx图标,使用设计器的方式实现,当然也可以手动添加代码:

  

  三、添加和设置子报表

  情景:显示复杂关系的数据。

  解决:进入"报表"--"设置报表栏",可以对报表进行各种设置,其中数据首只会打印一次,数据尾则会在所有数据之后被打印。

  

  

  四、日期显示

  情景:有些数据表里的日期字段是空的,这时FastReport会自动将其转化为0001/1/1的形式。

  解决:此时如果想要让日期为空时不显示此默认的形式,可以再次进入"报表"--"选项"中,在"一般"选项卡中取消勾选"转换空值"即可。

  

  五、数据表的嵌套

  情景:复杂的数据库表之间有很多复杂的主从对应关系,这时需要在数据源中建立关系。

  解决:选择动作--新建关系,然后就可以象在数据库里一样建立主外键关联了。

  

  六、手动确定数据源

  情景:有些时候SQL语句建立表的关系过于复杂,以至于很难建立良好的主从关系,比如我遇到的这样的SQL查询

  SELECT i.SheetKeyId,i.SheetId,i.OperatorName,
      i.InCheckDateTime,i.OutCheckDateTime,i.OutCheckPeople,
      s1.BranchName AS InBranchName,s2.BranchName AS OutBranchName
    FROM   dbo.T_StorageBranch s1 , dbo.T_StorageBranch s2 ,
      dbo.T_LeechdomIOSheet i , dbo.T_LeechdomIOSheet i2
    WHERE  i.InBranchKeyId = s1.BranchKeyId
    AND    i2.OutBranchKeyId = s2.BranchKeyId
    AND    i.SheetId = i2.SheetId

  既有自表关联,又有和其他表的关联,那建立主从关系岂不要郁闷死。。。

  解决:此时我的解决方法有两种,一个是基于FastReport是支持表和视图作为数据源的,此时可以事先
在数据库中建立视图,从而使用视图作为数据源解决此表的关联问题,当然如没有项目的需求,大可采用第二种方法,即点击"添加SQL查询",这是输入我们的
SQL语句,便会自动生成一个查询结果,我们只需要在报表设计时用其作为数据源就ok了。

  

  七、使用系统变量

  情景:我们经常会在报表打印时要求显示当前的页数,当前的数据量统计以及当前的打印时间等。

  解决:FastReport其实已经我们内置了所有这些功能,可以在系统变量中找到,只需要简单的拖入Date就可以显示出当前日期,拖入PageN就可以显示页码等。

  

  八、使报表显示时呈现常见的奇偶行变色效果。

  情景:数据量大时可以方便查看数据。

  解决:这里同样有两种方法,一是在"报表"--"样式"中添加一个样式,叫做EvenRows,什么样式都不用设置,确定即可,然后单击数据区,在外观的EvenStyle属性里面选择此样式,最后改变Fill属性的填充颜色即可。第二种方法是通过程序的方式来实现,代码如下:

  private void Data1_BeforePrint(object sender, EventArgs e)

  {

    if (((Int32)Report.GetVariableValue("Row#")) % 2 == 0)

     Data1.FillColor = Color.Gainsboro;

  }

  这里的Row#为系统内置变量,代表行号,我们选出偶数行后,设置FillColor为自己想要的颜色即可,但不可为window颜色,这样就看不出效果了。

  九、使用程序操作报表

  情景:在窗体程序中可以使用编程的方式对报表的相关字段进行操作。

  解决:

    //获取数据源中列的值

    string productName = (string)Report.GetColumnValue("Products.Name");

    

    //获取数据源

    DataSourceBase ds = Report.GetDataSource("Products");

    //获取系统变量值

    DateTime date = (DateTime)Report.GetVariableValue("Date");

    //获取总计数

    float sales = Report.GetTotalValue("TotalSales");

    //获取参数

    int myParam = (int)Report.GetParameterValue("MyParameter");

    //设置参数

    report1.SetParameterValue("EmployeeID", 2);

  十、备注

  1、在FastReport中的变量都使用的是[DataSourceName.FieldName]的形式,凡是以这种形式表示的都需要从数据库中读取,而普通文本则需要[文本内容]这样的形式就可以搞定。

  2、在FastReport中可以设定数据表的别名,这样可以在多表关联的时候使用别名与相关字段对应。

  3、如果你还没有心动的话,我贴几张现成的基于Northwind数据库的demo示例看看吧。。。

  

  

  

  

  估计就说这么多了,好用的东西大家一起分享哇。。。^_^

  

再议FastReport.NET(转)的更多相关文章

  1. 再议 js 数字格式之正则表达式

    原文:再议 js 数字格式之正则表达式 前面我们提到到了js的数字格式<浅谈 js 数字格式类型>,之前的<js 正则练习之语法高亮>里也提到了优化数字匹配的正则.不过最近落叶 ...

  2. Python学习之再议row_input

    再议raw_input birth = raw_input('birth: ') if birth < 2000: print '00前' else: print '00后' 运行结果: bir ...

  3. 再议Java中的static关键字

    再议Java中的static关键字 java中的static关键字在很久之前的一篇博文中已经讲到过了,感兴趣的朋友可以参考:<Java中的static关键字解析>. 今天我们再来谈一谈st ...

  4. 再议perl写多线程端口扫描器

    再议perl写多线程端口扫描器 http://blog.csdn.net/sx1989827/article/details/4642179 perl写端口多线程扫描器 http://blog.csd ...

  5. 再议C风格变量声明

    NeoRAGEx2002曾经有一篇文章提到这个问题,但是有很多内容并没有包括,例如const和__declspec. 最近我遇到一些这方面的问题,感觉有必要做一个系统性的总结.后来经过一些实验,得出了 ...

  6. (二)再议MII、RMII、GMII接口

    概述:         MII (Media Independent Interface(介质无关接口)或称为媒体独立接口,它是IEEE-802.3定义的以太网行业标准.它包括一个数据接口和一个MAC ...

  7. 再议Swift操作符重载

    今天我们来谈一谈Swift中的操作 符重载,这一功能非常实用,但是也相当有风险.正所谓“能力越大责任越大”,这句话用来形容操作符重载最合适不过了.它可以令你的代码更加简洁,也可以让 一个函数调用变得又 ...

  8. 再议Unity优化

    0x00 前言 在很长一段时间里,Unity项目的开发者的优化指南上基本都会有一条关于使用GetCompnent方法获取组件的条目(例如14年我的这篇博客<深入浅出聊Unity3D项目优化:从D ...

  9. 再议Python协程——从yield到asyncio

    协程,英文名Coroutine.前面介绍Python的多线程,以及用多线程实现并发(参见这篇文章[浅析Python多线程]),今天介绍的协程也是常用的并发手段.本篇主要内容包含:协程的基本概念.协程库 ...

随机推荐

  1. [ 转载 ] Android JNI(一)——NDK与JNI基础

    Android JNI(一)——NDK与JNI基础 隔壁老李头 关注  4.4 2018.05.09 17:15* 字数 5481 阅读 11468评论 8喜欢 140 本系列文章如下: Androi ...

  2. Codeforces.838D.Airplane Arrangements(思路)

    题目链接 \(Description\) 飞机上有n个位置.有m个乘客入座,每个人会从前门(1)或后门(n)先走到其票上写的位置.若该位置没人,则在这坐下:若该位置有人,则按原方向向前走直到找到空座坐 ...

  3. [CC-XXOR]Chef and Easy Problem

    [CC-XXOR]Chef and Easy Problem 题目大意: 给你一个长度为\(n(n\le10^5)\)的序列\(A(A_i<2^{31})\).\(m(m\le10^5)\)次询 ...

  4. Codeforces Round #281 (Div. 2) B. Vasya and Wrestling 水题

    B. Vasya and Wrestling 题目连接: http://codeforces.com/contest/493/problem/B Description Vasya has becom ...

  5. HDU 5745 La Vie en rose 暴力

    La Vie en rose 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5745 Description Professor Zhang woul ...

  6. Fiddler_解决Fiddler查看Post参数中文乱码的问题

    解决Fiddler查看Post参数中文乱码的问题 今天一个同事问我,为什么用Fiddler查看Post的中文参数,是一堆乱码,如下: 需要在注册表中增加一个键值: HKEY_CURRENT_USER\ ...

  7. dubbox REST服务使用fastjson替换jackson

    上一节讲解了resteasy如何使用fastjson来替换默认的jackson,虽然dubbox内部采用的就是resteasy,但是大多数情况下,dubbox服务是一个独立的app,并不需要以war包 ...

  8. KTAG K-TAG ECU Programming Tool

    KTAG K-TAG ECU Programming Tool Master Version V2.1 +J-Link JLINK Without Token Limitation Highlight ...

  9. poj1321 棋盘问题(深搜dfs)

    转载请注明出处:http://blog.csdn.net/u012860063? viewmode=contents 题目链接:id=1321">http://poj.org/prob ...

  10. CentOS内核定制

    版本号:1.0.1 作者:石硕 更新:2014-05-09 15:04:53 ============================================================ ...