Crystal Report 分栏功能详解

MultipleColumns

如果有一个报表需求,需要我们做一张类似于下面的报表,我们该怎么在Crystal Reports 里实现呢?首先我们需要分析一下这张报表有什么特别,仔细一看原来是一页上显示多列,通俗的讲应该是我们Word 排版中的分栏。如何去实现呢?

通过在Crystal Report里仔细查找,发现在Section Export  Details中有一个“Formatwith Multiple Columns ”的选项,从表面上看,好像只需要打个勾。有这么简单吗?先打个勾试试:

打上勾后,好像多了一个“Layout”选项卡,看来只打勾是不行的。那我们再看看这个“Layout”长什么样子的:

好像也不复杂啊,可是这些选项都什么意思?我们先在Width 里设个“2.500”看有什么变化:

从上面的变化中可以看到,Detail Section 已经分成了三块。看来已经实现了,那这个Width 起什么作用呢? 我们再改个小一点的“1.5”试试看:

现在我们可以看到它分成了五块,原来它是来控制分多少列的。看来这个“Width”对我们是至关重要的,那我们如何才能准确的指定这个“Width”值,从而得到我们想要的分栏结果?这里我给出一个例子,共大家参考,假设我们在Detail 里添加了三个字段,想让这三个字段能够分成三栏显示。那我们首先要知道这三个字段所占用的宽度是多少,我们所使用的纸张的宽度是多好?如果这三个字段占的总宽度是4 in, 纸张的宽度是12 in 那么我们应该可以分三栏的。反过来,如果我们想在12 in 的纸上显示5栏,那我我们这要保证这三个字段占的宽度小于或等于2.4 in。不过我见意你最好能多分配0.5 in ,这样报表的效果可能会更,当然也要结合用户的需求。

现在“Width” 参数我们会用了,那么Horizontal 和Vertical 怎么用?我们先分别给它们指定个值看看变化:

先不指定值,我们看到下面的结果:

当我们指定值后,得到下面的结果:

从上面的对比结果我们可以看出,垂直方向上的宽度变大了,那“Horizontal”参数大家都明白了,它是用来指定水平方向的宽度,需要注意的是我们在定义水平方面的值时要考虑页面的宽度,如果我们指定的值大于页面能容下的,页面的布局可能就乱掉了。

接下来我们看看“Across Then Down”和“Down Then Across”这两个是干什么的,我们再试试:

当我们选上“Across then Down”时得到下面的结果:

当我们选择“Down the Cross”得到下面的结果:

通过上面Order ID数值的对比,我们可以看到,” Cross Then Down” 是从左到右一行行排列的。“Down Then Cross”是从第一分列开始从上到下,然后是第二列,第三列等。我想在我们实际的应用中,会有这样的需求。

最后一个参数“Format Groups with multiple Column“从字面上理解,应该跟分组有关,那我个先给报表分个组再选上这一项看是什么结果:

上面的结果中,我们按Employee ID 分组,但没有选“Format Groups with multiple Column“。它的结果是我们正常的分组,分组字段值EmployeeID 3 显示在Group Section, 其它的还在Details Section.

当我们选上“Format Groups with multiple Column“, 得到下面的结果:

可能看到Employee ID 3 在分栏里面了。

通过上面的比较,我们发现如果选上这个选项,分组的Section 会加到Column中。如果不选,分组的Section 只能在单独的行里显示。看来这个很有用啊。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
分栏功能是指将页面成多个部,每个部可以独立滚动,常用于多列布局。在 Node.js 中实现分栏功能需要使用 HTML、CSS 和 JavaScript。 首先,创建一个 HTML 文件,并在其中添加多个 div 元素,每个元素代表一个栏目。给每个 div 元素设置相同的 class 属性,这样可以方便地对所有栏目进行样式设置。 ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>分栏功能</title> <style> .column { float: left; width: 33.33%; height: 300px; overflow-y: auto; } </style> </head> <body> <div class="column"> <p>第一栏内容</p> </div> <div class="column"> <p>第二栏内容</p> </div> <div class="column"> <p>第三栏内容</p> </div> <script> // 在此处添加 JavaScript 代码 </script> </body> </html> ``` 上述代码中,我们定义了一个名为 column 的 class,它包含了以下样式设置: - float: left; 表示让元素左浮动,使它们排列在同一行; - width: 33.33%; 表示每个元素的宽度为屏幕宽度的三之一; - height: 300px; 表示每个元素的高度为 300 像素; - overflow-y: auto; 表示当内容溢出时显示滚动条。 接下来,我们需要使用 JavaScript 实现分栏的滚动联动效果。具体做法是监听每个栏目的滚动事件,当一个栏目滚动时,其他栏目也跟随滚动。代码如下: ```javascript var columns = document.querySelectorAll('.column'); for (var i = 0; i < columns.length; i++) { columns[i].addEventListener('scroll', function () { var scrollTop = this.scrollTop; for (var j = 0; j < columns.length; j++) { if (columns[j] !== this) { columns[j].scrollTop = scrollTop; } } }); } ``` 上述代码中,我们使用 document.querySelectorAll 方法选取所有 class 为 column 的元素,并使用 for 循环为每个元素添加滚动事件监听器。在监听器中,我们获取当前元素的 scrollTop 属性,表示滚动条距离顶部的距离,然后将其赋值给其他元素的 scrollTop 属性,实现滚动联动效果。 最后,将 HTML 文件保存为 .html 格式,用 Node.js 运行该文件即可看到分栏功能的效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值