水晶报表 垂直文本的变法实现

先贴出本文要实现的效果:

大体实现思路是这样的:
每页固定显示几行数据,最后一页不够的补空行,这样的想法是基于第一列的文本是垂直显示的,既是垂直显示,总应该让它有足够的行给它显示这个垂直文本吧,尽量让它达到“垂直居中”的效果,因为在水晶报表里面是没有什么属性可以直接设置“垂直居中”的效果的。虽然没有属性可以设置,但是我们可以变着法的来实现,不过这个过程稍显繁琐,尤其是每页固定显示的行数多的时候(比如20条、30条甚至更多),须有足够的耐心:)
首先阅读本文前需先理解阿泰的这篇《水晶报表自动补空行&格线》(以下简称《补空行》):http://blog.csdn.net/babyt/archive/2009/02/15/4610085.aspx,否则将难以理清本文的思路走向
虽然最后一页经过补空行后总行数是固定的,但有数据记录的行数不定,该如何控制显示最后一页第一列的“垂直文本”呢,这是本文的最大难点(其他都是一些细活,本文方法的实现真的很不容易),经过一番思索,突破这一难点的原理是这样的:(本文每页数据控制显示10行,从第3行开始显示第一列的“垂直文本”)
如果总记录数/10的余数=1,说明最后一页显示的有数据记录只有一条,
紧随其后的则是显示9个空行,为了和前面数据页保持一致,第一列的“垂直文本”
自然也要从第三行(也就是此时的第2个空行)开始显示;
如果余数为2,说明此时最后一页显示的有数据记录有两条,紧随其后的
则是显示8个空行,此时就要从第一个空行开始显示;
......
好了,原理清楚后,看看模板的设计,这里只是给出细微之处的设计,具体设计详见《补空行》

 

 

第一列“垂直文本”的实现全是通过公式来实现的,所以少不了公式的操作,我们先看看公式在报表模板的物理位置

这里为什么要建6个公式呢(Col不属于空行显示的公式),原因在于“最坏的情况”就是最后一页只有一条有数据记录,则其余9行全是空行,此时第一列在:

第一个空行要显示为空;

第二个空行要显示“球”;

第三个空行要显示“星”;

第四个空行要显示“一”;

第五个空行要显示“览”;

第六个空行要显示“表”

因此需建立6个公式来合力控制显示第一列的“垂直文本”,知道原理后我们再来仔细瞧瞧这几个公式里面究竟编辑的是什么内容:)

Col公式:

EmptyCol1公式:

EmptyCol2公式:

NumberVar index := Count({DataTable1.TextType}) mod 10;
if index in [1,2,3,4,5] then
Mid('球星一览表',index,1)
else
''

EmptyCol3公式:

NumberVar index := Count({DataTable1.TextType}) mod 10;
if index in [1,2,3,4] then
Mid('球星一览表',index+1,1)
else
''

EmptyCol4公式:

NumberVar index := Count({DataTable1.TextType}) mod 10;
if index in [1,2,3] then
Mid('球星一览表',index+2,1)
else
''

EmptyCol5公式:

NumberVar index := Count({DataTable1.TextType}) mod 10;
if index in [1,2] then
Mid('球星一览表',index+3,1)
else
''

EmptyCol6公式:

NumberVar index := Count({DataTable1.TextType}) mod 10;
if index=1 then
Mid('球星一览表',index+4,1)
else
''

经过这样的控制后我们再来看看最后一页的效果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值