找回密码
 立即注册

QQ登录

只需一步,快速开始

frog28612861
注册会员   /  发表于:2024-2-22 15:21  /   查看:773  /  回复:6
1金币
我这边使用的是SectionReport,
抱歉因为是实际生产环境报表,所以无法代码提供

为方便说明,简化后的模版结构,大致如下
PageHeader (Height 2.66 inch)
GroupHeader (Height 0inch)
Detail (Height 0.4inch)
GroupFooter (Height 0.4inch)

PageFooter (Height 0inch)

打印用纸设置如下

Me.PageSettings.Orientation = PageOrientation.Landscape
Me.PageSettings.PaperKind = System.Drawing.Printing.PaperKind.A4


数据有两个字段,HeadField和DetailField,HeadField显示在PageHeader里(每页只在头部出一次),接下来是DetailField,出在Detail里
1. 如果HeadField发生变化,那么GroupFooter (Height 0.4inch) 跟在旧的数据后面显示,然后新的数据,出在新的一页里
2. 如果HeadField一直没变化,那么GroupFooter (Height 0.4inch) 一直不出,由报表自动换页(PageHeader每页都出),现在运行下来,是每页会出12行后自动换页

以上为前提条件

出现问题描述如下
1. 如果数据前12行HeadField是相同的,第13行变了,那么前面12行的数据都会出在第一页,而第二页明细里只出GroupFooter (Height 0.4inch),但此时,第二页的PageHeader里,出的内容是第13行的HeadField (正确的应该是第1~12行的HeadField)

2. 如果数据前13行HeadField是相同的,第14行变了,那么前面12行的数据都会出在第一页,而第二页明细里出第13行的数据,以及GroupFooter (Height 0.4inch),但此时,第二页的PageHeader里,出的内容是第14行的新的HeadField (正确的应该是第13行的HeadField)
3. 如果数据前14行HeadField是相同的,第二页的PageHeader出的内容没有问题


在代码的 Handles Detail.Format里,做了一些调查,发现如下现象,不知道是否跟问题相关?
1. Detail行的出力,开始位置Detail.CurrentLocation.Y,是2.96,不是2.66
2. 如果数据前13行的HeadField是相同的,在Detail.Format里,出到第13行的时候,PageNumber还是1,此时 Detail.CurrentLocation.Y=7.760001
    * 实际出来的报表,第13行的数据是在第2页里的

想请问
1. 是ActiveReports的问题,还是我这边做哪些设置可以避免这种情况?
以上,谢谢!

附件是大致的模版设置和打印结果的示意图




附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

最佳答案

查看完整内容

作为更好的方案,推荐您使用别的报表实现该需求,例如使用页面报表设计: 设计方法如下: 页面报表添加全局分组: 使用表格组件,设计同样的样式,例如展示表头信息和明细信息 预览效果: 在改变高度的情况下,会自动将表头表尾对最后一行进行匹配。不会出现区域报表的问题。 报表如下:

6 个回复

倒序浏览
最佳答案
最佳答案
Felix.LiWyn认证
超级版主   /  发表于:2024-2-22 15:21:09
来自 5#
作为更好的方案,推荐您使用别的报表实现该需求,例如使用页面报表设计:


设计方法如下:


页面报表添加全局分组:

使用表格组件,设计同样的样式,例如展示表头信息和明细信息

预览效果:

在改变高度的情况下,会自动将表头表尾对最后一行进行匹配。不会出现区域报表的问题。
报表如下:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
frog28612861
注册会员   /  发表于:2024-2-22 15:53:22
2#
本帖最后由 frog28612861 于 2024-2-22 15:55 编辑

如果是前13行的HeadField数据一样,到第14行发生变化,在Detail.Format里加了点log,代码和结果如下

Private Sub Detail_Format(sender As Object, e As EventArgs) Handles Detail.Format

    Debug.Print("==Detail_Format===Me.PageNumber=" + (Me.PageNumber))
    Debug.Print("Me.Detail.CurrentLocation.Y=" + (Me.Detail.CurrentLocation.Y))
    Debug.Print("=========================================")

End Sub



==Detail_Format===Me.PageNumber=1
Me.Detail.CurrentLocation.Y=2.96
================================
==Detail_Format===Me.PageNumber=1
Me.Detail.CurrentLocation.Y=3.36
================================
==Detail_Format===Me.PageNumber=1
Me.Detail.CurrentLocation.Y=3.76
================================
==Detail_Format===Me.PageNumber=1
Me.Detail.CurrentLocation.Y=4.16
================================
==Detail_Format===Me.PageNumber=1
Me.Detail.CurrentLocation.Y=4.56
================================
==Detail_Format===Me.PageNumber=1
Me.Detail.CurrentLocation.Y=4.960001
================================
==Detail_Format===Me.PageNumber=1
Me.Detail.CurrentLocation.Y=5.360001
================================
==Detail_Format===Me.PageNumber=1
Me.Detail.CurrentLocation.Y=5.760001
================================
==Detail_Format===Me.PageNumber=1
Me.Detail.CurrentLocation.Y=6.160001
================================
==Detail_Format===Me.PageNumber=1
Me.Detail.CurrentLocation.Y=6.560001
================================
==Detail_Format===Me.PageNumber=1
Me.Detail.CurrentLocation.Y=6.960001
================================
==Detail_Format===Me.PageNumber=1
Me.Detail.CurrentLocation.Y=7.360001
================================
==Detail_Format===Me.PageNumber=1
Me.Detail.CurrentLocation.Y=7.760001
================================
==Detail_Format===Me.PageNumber=3
Me.Detail.CurrentLocation.Y=2.96
================================
==Detail_Format===Me.PageNumber=3
Me.Detail.CurrentLocation.Y=3.36
================================
回复 使用道具 举报
Felix.LiWyn认证
超级版主   /  发表于:2024-2-22 17:00:27
3#

报表显示问题
您好,我本地目前测试的结果如下:

1.
当HeadField充满第一页,而GroupFooter被挤到第二页的时候,确实会出现您说的问题。

,这个问题我们会反馈开发。
关于这块目前确实没有特别好的解决方法。

但是针对您的需求我们大概懂。您是希望当数据不变的时候,一直展示,当分组数据变的时候,换页,并且头部数据跟着分组走。
这个我们现在更推荐使用别的报表实现。比如RDL报表。sectionReport因为操作较复杂,目前已经不再推荐使用了。也基本不做改进了。但是对于bug还是会反馈处理。
我们这边先和开发交流一下,有结果了在给您回复

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
frog28612861
注册会员   /  发表于:2024-2-22 17:30:54
4#
非常感谢!

目前我这边的实际使用环境,还是NET11的版本,而且有很多报表,更换报表方式或者升级到AR17,当前都不太可行。

主要是确认这个问题的确是ActiveReport自带的,那么我这边在实际使用的时候,会尽量注意。
目前试着通过报表模版每页最大的行数和PageNumber,代码里已经可以控制PageHeader的内容,但是这不是一个通用的方法,需要在每个报表里做相应修改。
回复 使用道具 举报
frog28612861
注册会员   /  发表于:2024-2-22 17:56:28
6#
麻烦问一下,在页面报表里,如果是12行的数据,第二页显示正常吗?

就是12行一页,第13行的HeadField里的数据变了,需要显示在新的一页里,
但是在这之前,需要显示TOTAL行,就是Case2的情况

第一页:PageHeader里显示H01和12行数据
第二页:PageHeader里显示H01,没有数据行,只显示TOTAL行
第三页:PageHeader里显示H02和对应的数据
回复 使用道具 举报
Felix.LiWyn认证
超级版主   /  发表于:2024-2-22 18:01:09
7#
您好,页面报表有属性:禁止单独显示表尾,所以不可能出现这种情况。
也就是即使您刚好调整第一页显示12条显示完,他也会第一页只显示11条,然后把第12条显示在下一页,并组成一个新的表格
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部