水晶报表简单示例(转)

在我们这个示例中采用的是OLEDB。

示例的基本功能是:通过OLEDB使报表与数据库关联起来,通过按特定字段分组,实现组分页。如果一组数据大于5条时,每5条分页。别外一个功能是,如果某个页不足5页时,以空白行填补。为显示空白行,可以在每一行下面设置一条线。

组分页可以在组页眉和组页脚上设置,本示例中在组页眉中设置组分页,在组页脚中设置填补空白行。

步骤1:创建表

在sql server2005中创建名称为:students的表,如下

在表中填充一些数据,用于测试。

步骤2:创建水晶报表

在VS2005中创建一新工程,在右侧的“解决方案资源管理器”中右键新建的工程名,先“添加”-->"新建项“,选”crystal报表 “  确定,进入创建向导,

                                           单击OK

                                     选OLE DB(ADO)

                                    在上图中 选择”SQL Native Client“然后”下一步“

                                    在上图中 填入连接数据库的信息,单击”完了“

                  在上图中 在左栏中选中自己建的表”students",将其添加到右栏中,单击”下一步“

                    在上图中 在左栏中将需要在水晶报表中显示的字段添加到右栏中,单击”完了“

到些,基本报表创建完毕,后面将进行,具体设置。待续。。。。

步骤3:创建分组

在报表设计区内右键-->插入-->组

                   在“Common”标签中,第一个选择要依照哪个字段分组,第二个选择排列顺序,单击OK

步骤4:创建分页

在本示例中有两种分页控制,一种是组分页,一种是一组数据大于5条时,每5条一页。

组分页可以在页眉和组页脚上设置,现在组分页在页眉中设置:

右键-->报表-->节专家

在上图,选中“Group Header......”,在右侧选中"New Page Before" ,单击其右侧的公式按钮

输入上图中所示的语句,单击左上的“save and close”,OK

这样,就实现了组分页。

建一个”运行总计字段“,用于计算每个组的记录条数,设置如下图:

 

下面设置组内每条分页:

在“节专家”中,选中"Details",选中右侧的"New Page After",单击右侧的公式按钮,输入下图所示的语句

注:(1){#RTotal0}为运行行总汇。一般数据是逐条读取的,所以如果把{#RTotal0}加到"Detals"上(如下图),

    预览,会出现下面情况

    注意,前面的序号为{#RTotal0}的值,由此可以看出,{#RTotal0}的值是随程序运行而变化的。

    (2)Count ({students.id},{students.grade} )为,按students.grade分组的每个组的总条数,在一个组中 是     一个不变值。

对上面我们可以这样理解,比如一个组中有7条记录,当程序运行显示到此组的第一页的第5条记录时,{#RTotal0}=5,Count ({students.id},{students.grade} )=7,依照前面语句判断,返回true,即要在当前页后创建新页。

保存设置,这样,分页设置完毕!

步骤5:填补空白行

首先,为什么能看到空白行,可以在'Details'和每个组页脚中添加一条横线。

在“节专家”中,选中“Group Footer....”,点击"Insert",插入三个组页脚:

(补充:组内分页的控制方法:根据组内记录条数与5进行取模,其值被5减,得到的值即为要填补空白行的数量,把此条件,再利用组页脚的抑制显示,即可达到控制相应页脚是否显示)

然后,选中"Group Footer #1a...",再选中右侧的“suppress(No Drill-Down)“,单击右侧的公式按钮,输入下图所示的语句

注:Count ({students.id},{students.grade} ) mod 5 >0用于判断为5或为5的整数倍时是否显示,

   Count ({students.id},{students.grade} ) mod 5 <=3 用于判断不是5或5的整数倍时是否显示。

然后,依照上面一步,设置后边的三个页脚(group footer #1b,#1c,#1d),相应的语句为:

#1b :If Count ({students.id},{students.grade} ) mod 5 >0 and Count ({students.id},{students.grade} ) mod 5 <=3 then
    false
else
    true

#1c:If Count ({students.id},{students.grade} ) mod 5 >0 and Count ({students.id},{students.grade} ) mod 5 <=2then
    false
else
    true

#1d:If Count ({students.id},{students.grade} ) mod 5 >0 and Count ({students.id},{students.grade} ) mod 5 <=1 then
    false
else
    true

 

到此,示例功能设置完毕。测试,OK!!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值