2019-1-17水晶报表技巧总结【2】

第一条:水晶报表分组分页且每页最多显示N条记录

要求:1、详细节最多5条记录(不能超过5条);
           2、无论前一组是否满5条记录,每个新组都要另起一页

           3、可以显示组内分页的情况,即:显示一个组被分为几页并且当前是第几页

我们知道每页最多显示N条的控制方法,打开节专家,在详细节后面新建页公式编辑:
RecordNumber mod N = 0

RecordNumber即记录数,无论分组与否,是自动随记录递增的,所以在这里,我们不能用RecordNumber,而应该是在每个新组前要重置这个RecordNumber,用这个重置的RecordNumber来取模控制每页最多显示5条记录,于是我们很自然就想到了运行总计字段,由它来帮我们重置RecordNumber,

这样我们应该就很明朗了,接下来让我们一起去设计模板:

报表按ID分组就不用再提及了吧?(右击报表空白处->插入->组)
首先新建一>运行总计字段
汇总字段:XXX(最好选择的字段和分组字段不同)

汇总类型:计数

求值:对于每个记录

重置:组更改时

设计好后把,字段放到【详细资料】中,根据需要可以抑制显示。

点击节专家,【详细资料】-->【在后面也新建页】勾上-->设置公式

字段是刚刚建立的【运行总计字段】
{#RTotal0} mod 10=0

针对需求2,与需求1同理,只不过此时我们是在#组尾(组页脚)节在后面页新建页的公式编辑:

Not OnLastRecord

OnLastRecord意指最后一条记录,Not OnLastRecord自然是非最后一条记录,在这里就是指非最后一条记录时就在后面页新建页,最后一条记录时就不用再新建页了。若不用该公式控制的话,报表的最后一页总是空白页(没有详细节数据)
需求3:组内分页及显示页码

新建一个【公式字段】公式设置如下:

记录的组记录总数:count(一个报表参数,分组参数);前者最好是运行总计的字段。如果有汇总,请在count最后+1,因为多一行数据。!!!

方式一:注意组内数据条数和当前组内序号

//每个组的总记录数
NumberVar groupRecordCount := Count ({DataTable3.Type}, {DataTable3.ID});

//每个组的总页数
NumberVar groupPageCount := groupRecordCount / 5;
If Int(groupPageCount) <> groupPageCount Then
(
  groupPageCount := Int(groupPageCount) + 1
);

//重置后的RecordNumber
NumberVar groupRecordNumber := {#RTotal0};

//组内当前页
NumberVar groupPageNumber := groupRecordNumber / 5;
If Int(groupPageNumber) <> groupPageNumber Then
(
  groupPageNumber := Int(groupPageNumber) + 1
);

//最终报表界面显示
‘第‘ + ToText(groupPageNumber, 0) + ‘页 / 共‘ + ToText(groupPageCount, 0) + ‘页‘
//说明:Int函数是取整函数,如Int(1.2)=1; Int(1.9)=1
//写好后将该公式字段拖放到#组头(组页眉)节即可

方式二:注意组内数据条数和当前组内序号

numbervar x1;
numbervar x2;
numbervar p1;
numbervar p2;

//x1是每个组的数据条数
x1:=count({OUT_1_DATASET.code1},{OUT_1_DATASET.Warehouse_position});

//得到总页码
if(x1%10=0)then
p1:=x1/10
else
p1:=INT(x1/10)+1;

//得到当前行组内序号。其实就是换页第一条的序号
x2:={#RTotal0};

//用序号除以每页的条数5,得到当前页码
if(x2%10=0)then
p2:=x2/10
else
p2:=INT(x2/10)+1;

//组合
‘第‘+totext(p2,0)+‘页/共‘+totext(p1,0)+‘页‘

  


第二条:一个获取记录的标记和页脚的显示

在IDE左侧的“字段资源管理器”里的“公式字段”点击右键“新建”,新

建一个字段“Group”,编辑赋值:
whilereadingrecords;
true;
这里是TRUE,获取的就是“真”,否则获取的就是“假”

  

控制子报表每页显示数目,假设为10行每页,只是做一下说明,不要设置公式
注意设置的行数最好基本上能打印到页面的底部

拆分一个详细资料节出来,把页脚内容写上,抑制显示,设置公式为
recordnumber mod 10<>0
在这个节上进行分页控制,“在后面页先建页面”勾上,设置公式为
recordnumber mod 10=0

这样的话每页最下面会显示该节模拟页脚
最后一页如果不满10行的话,因为你设置了报表页脚,也可以模拟成一个页脚了
为了防止最后有一页刚好显示10行导致出现双重页脚
还需要进一步改进一下抑制显示的公式
If onlastrecord then
true
else
if recordnumber mod 10<>0 then
true
else
false

最后页不足,用空行填充: (Basic语法)
新增一个空白详细资料行,格式化此节,在抑制显示(无深化)打勾
公式中输入:
if not onlastrecord  then
    FORMULA = TRUE
else
   if (RecordNumber mod 5 <= 1) then  ‘第一个
       FORMULA = TRUE
   else
       FORMULA = FALSE
   end if
end if

  

原文地址:https://www.cnblogs.com/liuqifeng/p/10281408.html

时间: 2024-08-06 01:07:56

2019-1-17水晶报表技巧总结【2】的相关文章

2019-1-16水晶报表技巧总结

第一条:合计问题,包括汇总或者是简单数量合计或者是页面行数的统计或者是页面数的统计等... 说简单点,就是3个公式 AmountReset 用于清空页合计 RunningTotal 用于累加页合计 AmountDisplay 用于显示页合计. 在“字段资源管理器”对话框中选择“公式字段”,然后单击“新建”. 将公式命名为“RunningTotal”,然后单击“使用编辑器”. 出现公式工作室,公式编辑器处于活动状态. 将以下内容输入“公式”框: WhilePrintingRecords; Curr

C# 用vs2008连接SQL数据库做动态水晶报表

博主是个还在上大学的新手,如果有什么说错的地方请务必帮我指出来,谢谢! 想要完成一个能够动态改变其中数据的水晶报表,可以通过创建一个 数据的中转站来存储和输出数据的方式. 借由这个中转站,我们可以通过为它动态输入数据,然后再将数据导出到水晶报表,来达到得到有动态数据的水晶报表的目的. 仅在vs2008中,很多它自带的应用也可以达到中转站的作用,比如数组,数据集等. 博主最近刚在学SQL所以尝试了用VS连接数据库来做水晶报表. 1.首先,博主在SQL中创建了名为xxs的数据库,然后再在数据库xxs

Crystal Reports 2008(水晶报表) JDBC连接mysql数据库

在本blog中,主要介绍的是Crystal Reports 2008使用JDBC连接mysql数据库. 在连接之间,首先要确认你电脑上面都安装了mysql数据库. 其次,就是jdbc连接数据时候所使用的相关jar包. 接下来,就可以进行数据库的一些连接操作了. 对JDBC不是很了解的,可以到 完整java开发中JDBC连接数据库代码和步骤 了解相关的操作 1.打开Crystal Reports的数据专家 2.点击JDBC(JNDI)出现: 3.输入url和数据库类名,点击下一步: 4.输入pas

WinForm 水晶报表的简单使用

今天需要做出一个水晶报表, 以前在学校的时候就看过一点点,有些印象, 但没有具体的了解过,今天百度了一下,发现这个东西相当的方便简单. 还很完美. 开发工具是VS2010,水晶报表没有内置.需要自己下载. 网上有很多,结尾处的参考文章地址中也有. 需要注意的有两点: 1VS2010运行环境默认为.NET FRAMEWORK 4.0 CLINET PROFILE,要改为.NET FRAMEWORK 4,选中项目右键属性就可以更改了: 2.在项目中加一个APP.CONFIG(这是针对WINFORM项

Asp.Net中使用水晶报表

Asp.Net中使用水晶报表(上) 在我们对VS.Net中的水晶报表(Crystal Reports)进行研究之前,我和我朋友对如何将这个复杂的东东加入我们的Web应用有着非常的好奇心.一周以后,在阅读了大量的“HOWTO”文档之后,我们成功地将一些简单的报告加入到了我们的Asp.net程序中,并得到了一些小决窍. 这篇文章教你如何在.Net Web应用中使用水晶报表,也可以让你在学习过程中少走一些弯路.为了得到最好的效果,读者最好需要有一些基础的Asp.Net访问数据库的知识以及使用VS.Ne

关于水晶报表的一些错误

运行程序发现未能加载水晶报表的一些文件,其实自从vs2005开始以后的版本就已经不自带水晶报表的插件了,因此需要去下载,现在提供下载的东西 这么多总有一款适合你的 ,当遇到无法加载水晶报表的某些文件时的错误时不妨找到这些文件,安装后试试,如果找不到可以M我.

水晶报表 Crystal Report 调用存储过程时出错 找不到表 ,解决方法。

用 CrystalReportViewer1 控件在asp.net的网页上显示报表,如果做报表时调用数据表数据的方式调用是可以成功的,但报表是用存储过程获取数据方式会出现以下错误: 找不到表'RptOpenCheck;1' . 文件 G:\TEMP\FO-OpenCheck {6D191F06-DECF-4A25-88FC-8553E3D435AA}.rpt 内出错: 找不到表. Error: 未将对象引用设置到对象的实例. The table 'RptOpenCheck;1' could no

在水晶报表( Crystal Reports)中插入条形码(附视频)

水晶报表( Crystal Reports)是当今商业市场上最流行的报表环境之一.跨国公司利用水晶报表( Crystal Reports)来生成多种数据源的报表,为业务分析.战略规划和库存控制等方面提供了强大的洞察力.同时水晶报表( Crystal Reports)中也时常引入条形码技术.虽然很多条形码公司提供了条码字体或.NET控件来满足这方面的需求,然而客户发现这些解决方案十分繁琐.复杂而且价格高昂. 2010年,IDAutomation获取了一项特殊条码生成器对象的专利---Native

asp.net中使用水晶报表 ---使用向导

编写环境 vs2013,sqlserver2012 由于我们安装的2013没有水晶报表,所以需要我们手动的去下载并安装 下载地址为http://www.aspsnippets.com/Articles/Download-Crystal-Reports-for-Visual-Studio-2013.aspx 然后我们就来编写我们的水晶报表,在编写前我们需要了解的是水晶报表有两种方式 1.pull 拉 拉的意思就是说,当你用的时候就连接数据库然后返回数据 2.push 推 推的意思就是保存在本地,要