这样的动态排版,水晶报表怎么做?

secondonsite 2010-08-28 10:04:04
环境:V2005内置水晶报表。需求:在水晶报表上摆放着三个字段框FO1, FO2, 和FO3。他们都链着数据源的对应字段。动态排版的意思是:

当字段框FO1的值为2时,字段框FO2显示而字段框FO3隐蔽;
当字段框FO1的值为3时,字段框FO2隐蔽而字段框FO3显示,并且显示在FO2的位置上;

高手指点,谢谢!
...全文
234 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
secondonsite 2010-09-02
  • 打赏
  • 举报
回复
结贴。还有问题,另开一贴。
阿泰 2010-08-30
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 secondonsite 的回复:]

谢谢阿泰的指导。再有,水晶报表有无类似CheckBox的对象?挺有用的。
[/Quote]

本身没有,但是可以实现类似的效果。

使用公式+特殊字体来实现,下载这个模板看看。

http://download.csdn.net/source/1070687
secondonsite 2010-08-29
  • 打赏
  • 举报
回复
谢谢阿泰的指导。再有,水晶报表有无类似CheckBox的对象?挺有用的。
阿泰 2010-08-29
  • 打赏
  • 举报
回复
参考下下文中的思路,更建议实际试验下看下效果

在水晶报表中实现任意选择指定字段显示-模板及C#升级版

另外,要在水晶报表上利用公式控制字段位置的移动是不可以的,可以在代码中控制
比如控制字段抑制显示,控制字段的显示长度,坐标位置,参考:
【水晶报表内功心法】--信手拈来,掌控对象 [推荐]
阿双2009 2010-08-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 secondonsite 的回复:]
动态改变文本[/Quote]

漏看了这个。。如果要动态改变文本,应该用公式字段较为合理。
阿双2009 2010-08-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 secondonsite 的回复:]
大家再说说怎么定位。另外如果有一个文本框,怎么随F01字段的值动态改变文本和显示/隐蔽。谢谢!
[/Quote]
右击这个文本框对象,勾选抑制显示,点击后面的“x+2”按钮,编辑:
if {F01字段} = '2' or {F01字段} = '3' then
true //意思是当F01字段值为2或3的时候,文本框不显示(具体什么值不显示根据需要修改)
else
false //若是其他值,则显示文本框
secondonsite 2010-08-29
  • 打赏
  • 举报
回复
大家再说说怎么定位。另外如果有一个文本框,怎么随F01字段的值动态改变文本和显示/隐蔽。谢谢!
阿泰 2010-08-29
  • 打赏
  • 举报
回复
动态布局的话,可采用就采用9楼第2个链接里的方法,用代码控制报表上控件的位置
如果布局相对比较稳定,实际上还是用若干个不同的公式字段占好位置
然后根据需要,用不同的字段(或直接的值)填充不同的公式,原理同9楼第一个1链接
实际只要涉及到动的部分,难免要使用上面两个链接中的一个,或两个一起用。
这个与表格与否无关,关键还是其内在的机理。

无关联关系的多数据源,只能用子报表。
有关联关系的多数据源,可用可不用。
secondonsite 2010-08-29
  • 打赏
  • 举报
回复
阿泰能光顾本帖倍感荣幸,我就是想排一个非表格式的版,再详细版面上按FO1字段显示的值确定布局,不同的FO1的值布局不同,就像Winform的窗体布局一样。您有什么建议,洗耳恭听。顺便讨教:水晶报表上只有通过子报表来实现多个数据源吗?没其他方法?谢谢!
大Y 2010-08-28
  • 打赏
  • 举报
回复


不太会用,看着LS的应该是正解呀。LZ试试。
阿双2009 2010-08-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 secondonsite 的回复:]
不止两个,这里只是抽象出来。
[/Quote]
那就新建两个公式字段x1和x2,替换你的F02和F03字段
x1公式编辑:
if {F01字段} = '3' then
{F03字段}
else
{F02字段}

x2公式编辑:
if {F01字段} = '2' or {F01字段} = '3' then
''
else
{F03字段}
secondonsite 2010-08-28
  • 打赏
  • 举报
回复
不止两个,这里只是抽象出来。
阿双2009 2010-08-28
  • 打赏
  • 举报
回复
另:你这边的F01字段只有这两个值吗?你的报表不管什么情况,都只显示两个字段吗?
阿双2009 2010-08-28
  • 打赏
  • 举报
回复
右击F02字段对象,设置对象格式,勾选抑制显示,并点击后面的“x+2”按钮,编辑:
if {F01字段} = '2' then
false
else if {F01字段} = '3' then
true

同理对F03字段对象
if {F01字段} = '2' then
true
else if {F01字段} = '3' then
false

不过没办法达到你这个需求(并且显示在FO2的位置上)

4,818

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 图表区
社区管理员
  • 图表区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧