广告合作
  • 今日头条

    今日头条

  • 百度一下

    百度一下,你就知道

  • 新浪网

    新浪网 - 提供新闻线索,重大新闻爆料

  • 搜狐

    搜狐

  • 豆瓣

    豆瓣

  • 百度贴吧

    百度贴吧——全球领先的中文社区

  • 首页 尚未审核订阅工具 订阅

    FastReport教程之交叉报表

    来源:网络收集  点击:  时间:2024-06-10
    【导读】:
    FastReport教程之交叉报表,这种报表类型是表格结构,意思是它包含着一系列的行和列。工具/原料moreFastReport方法/步骤1/37分步阅读

    这种报表类型是表格结构,意思是它包含着一系列的行和列。同时它不可预知,表格有多少个行和列。这就是为什么报表不但纵向增加,而且横向增加。以下显示这种类型的报表的例子:

    表格的数据如下:

    2/37

    这个例子中,表格有两个行和四个列。A和b行的标题,1,2,3,4是列的标题。A1,a2..a4,b1..b4是表格中的数据。我们创建一个数据集,有三个字段,包含如下内容:

    a 1 a1

    a 2 a2

    a 3 a3

    a 4 a4

    b 1 b1

    b 2 b2

    b 3 b3

    b 4 b4

    第一个字段为行序号,第二个字段为列序号,第三个字段为表格数据。当输出报表时,FastReport在内存创建一个表格,并填入数据。

    标题如果有两层,显示数据如下:

    3/37

    报表需要如下数据:

    a 10 1 a10.1

    a 10 2 a10.2

    a 20 1 a20.1

    a 20 2 a20.2

    b 10 1 b10.1

    b 10 2 b10.2

    b 20 1 b20.1

    b 20 2 b20.2

    4/37

    内存中创建的表格数据如下:

    5/37

    1、创建交叉报表

    现在我们从理论转到实践。我们创建一个简单的报表,数据包含四年来的雇员的薪水。这样,我们需要一个“CrossTest”的数据表,数据包含如下内容:

    6/37

    在delphi中创建一个新的工程,添加“TTable”,“TfrxDBData”和“TfrxReport”组件。并设值其属性:

    Table1:

    DatabaseName = c:\Program Files\FastReport 4\Demos\Main

    TableName = crosstest.db

    frxDBDataSet1:

    DataSet = Table1

    UserName = SimpleCross

    7/37

    为了完成交叉报表,我们需要使用组件“TfrxCrossObject” ,此组件在FastReport组件面板上。将他添加到delphi的表单中,不需要设置任何属性;同时,包含全部可用函数的“frxCross”单元被添加到uses列表中。

    进入报表设计器界面,首先连接数据源,再在报表中添加“Db Cross tab”组件。

    8/37

    通过事件编辑器,设置组件的相关属性。双击组件可以打开编辑器界面。

    9/37

    图形中数字区说明

    1:可用的数据源下拉列表

    2:选择数据源的字段列表。字段可以被拖拽到3、4、5区域中。

    3:生成行标题的字段列表。

    4:生成列标题的字段列表。

    5:显示表格数据的字段列表。

    6:表格结构预览

    7:可选项。

    10/37

    在这个界面中,只能通过鼠标进行操作修改。在这个示例中,可以托动鼠标将2区域的字段列表托拽到3、4、5区域。然后点击确定,显示结构如下:

    11/37

    预览报表,显示界面如下:

    12/37

    2、改变显示

    让我们改变组件的显示模式。首先我们要做的就是改变标题的颜色,并改变Grand Total 改变为“汇总”。给边非常简单,一次选中“year”,“Name”,“Grand Total”组件,点击按钮设置颜色,

    13/37

    页可以在组件的编辑器中选择你喜欢的样式。

    14/37

    改变“Grand Total” 标题,上击要修改的组件,从弹出的编辑窗口中修改文字即可。

    格式化显示结果,可选选中第一个单元格(year和name的交叉位置)。点击右键从菜单中选择“display format”。

    15/37

    选中需要得显示格式,然后关闭格式化界面,显示结果如下图:

    16/37

    3、使用函数

    在上面的示例中,我们可以看到员工四年的工资以及工资汇总情况,我们还可以使用一下函数:

    sum:汇总值和

    Max:求最大值

    Min:求最小值

    Avg:求平均值。

    Count:计数

    我们示例MIN函数,打开交叉组件编辑器,在6区选择salary,

    17/37

    从菜单中选择最小值。把表格中的汇总字符改为最小值。然后显示结果:

    18/37

    4、对结果进行排序

    对行和列进行升序排序,如果结果是数字型,则按数据进行排序,如果是字符型,则按字母顺序排序。我们可以对行和列分别进行设置排序模式。

    我们做个示范,让year进行降序排列,设置界面如图(组件设计器):

    19/37

    显示结果:

    20/37

    5、组合标题的表格

    我们的示例只有一个行头和一个列首。现在我们设计一个复杂标题的报表,它可能包含两个行或列数据。表格包含如下数据内容:

    21/37

    设置界面如下:

    22/37

    结果显示界面如下:

    23/37

    注:报表自动在每个year最后做一个总计,这个可以在组件编辑器中设置year的“小计”标识。

    24/37

    另外注意,在最后一列我们没有做中间的汇总统计,实际上,在我们的示例中也没有这个必要。

    25/37

    6、调整单元格的宽度

    察看前面的示例,可以很清晰的发现,单元格可以自动调整其宽度,以适应最大字符宽度。

    然而有时却不尽人意,如果字符特别的长,这时报表的样式就变得非常难看。如何解决这种情况呢?让我们采用3种方法进行处理。

    最简单的方法就是字组件中,将字符设成多行。

    Total

    for

    可以看到结果如下:

    26/37

    然而,如果行或列的结果值的字符串长度非常大时,这种方法就不适应了。这就是cross-tab组件为什么有”Minwidth”,”MaxWidth”属性参数了。

    默认情况下,Minwidth值为0,MaxWidth属性值是200,这可以在大部分情况下都适用。用户可以根据实际需要进行对这个值进行设置。

    这样,在我们的示例中,我们设置Minwidth=MaxWidth=50;意思是说单元格在任何情况下都是50个象素值,如果字符串比较小,系统自动调整宽度到50,如果字符串长度比较大,系统还是调整宽度到50,同时,长的部分被分割。显示结果如下图:

    27/37

    第三种就是手动调整单元格宽度。这时,需要设置AutoSize属性值为false。现在可以通过鼠标改变组件的大小。显示界面如下:

    28/37

    记住,如果取消了组件的自动大小属性,则在报表时,系统不能在调整单元格的宽度和高度,预览时的结果可能如下图:

    这时,稍微在调整一下单元格的宽度即可。

    29/37

    7、字体颜色和突出显示

    有时我们需要突出显示某些结果值,或通过字体颜色进行区分。我们在组报表中测试过突出显示方法。我们使用条件进行设置突出显示,这在报表中是非常有用的。

    添加突出显示:在我们的示例中,我们将结果值大于3000的字体颜色改为红色,选中单元格,在工具览中点击按钮,弹处条件设置对话框。设置参数value3000,并改变字体颜色为红色。

    30/37

    点击确定关闭窗口,进行预览:

    同样,用户可以设置全部的单元格,行和列的值。

    31/37

    同为比较常用的报表工具,FineReport对交叉报表的解决方案与FastReport有所不同,具体如下:

    32/37

    1.概述

    交叉表,也是常见的基本报表类型,分组报表只是从上到下将数据分组显示,而交叉表则是从上到下、从左到右都将数据分组的报表,如下图:

    FineReport天然支持行列对称,设计交叉表的方法也很简单。

    33/37

    2.制作步骤

    2.1新建工作簿,添加数据集

    新建工作薄,添加数据集ds1,SQL语句为SELECT * FROM 。

    34/37

    2.2制作交叉表

    设计好表样后,将数据列拖入对应单元格:

    35/37

    纵表头:地区与销售员默认纵向扩展实现从上到下分组;

    横表头:将产品类型与产品设置为从左到右扩展,让产品横向分组,实现横表头;

    数据:根据父子格的概念,销量会以销售员为左父格,产品为上父格,自动匹配出销售员与产品对应的销量。

    预览即可看到上图交叉表。

    注:此处销售员与产品对应的销量是唯一的,因此,直接将销量拖入单元格即可。

    另:若销售员与产品对应的销量不唯一,则将销量数据列的显示方式设为汇总-求和,详细请查看数据显示方式。

    36/37

    2.3其他设置

    排序、突出显示以及字体颜色调整参考具体章节

    37/37

    2.4保存发布

    本文关键词:

    版权声明:

    1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。

    2、本站仅提供信息发布平台,不承担相关法律责任。

    3、若侵犯您的版权或隐私,请联系本站管理员删除。

    4、文章链接:http://www.1haoku.cn/art_895843.html

    相关资讯

    ©2019-2020 http://www.1haoku.cn/ 国ICP备20009186号05-06 04:30:33  耗时:0.026
    0.0257s