首页 > 解决方案 > SSRS:需要组页脚位于页面底部

问题描述

我最近将旧的 Crystal 报表转换为 SSRS。我差不多完成了,但还有一个问题。在 Crystal 中,组页脚似乎都锚定在页面底部,而在 SSRS 中,它们直接位于细节下方,在组页脚下方留下一堆空白。

我在谷歌上搜索了很多次,发现很少有涉及组页脚的文章,它总是页面或报告页脚。我想要的是使用所有剩余空间的详细信息部分。我试过让它更大,但是当我在细节中有多行时,它后面有一堆空白。我尝试增加各种组页脚的高度(我在本报告中有 3 个组),但它似乎缩小到内容。我已经检查了组属性、报告属性、我能找到的每个属性页面,但我似乎找不到将它们锚定到底部的东西。我可以将一个元素的垂直对齐设置为底部,但我需要所有 3 个组页脚都位于底部。

我附上了两份报告的图片,SSRS 一份显示了我需要固定在底部的内容,而 Crystal 一份显示了它应该是什么样子。我觉得这应该是一件容易的事。我见过的唯一解决方案是将高度设置为公式的占位符,其中包含 6 个值,以尝试计算它应该占据多少高度。这似乎是一个荒谬的解决方案。

我不确定这是否重要,但我将这些报告保存为 rdlc 格式,因为它们是由 API 提供的。我在 rdl 中编辑它们,然后将它们复制过来并重命名扩展名。

SSRS 报告

原始水晶报表

我尝试包含 XML,但它超出了问题的字符限制(200k+ 个字符)。如果有人需要,我将不得不想办法发送它。

标签: reporting-servicesgroupingfooter

解决方案


SSRS 不擅长做这种间距。

但是,我们可以通过执行以下操作来欺骗它。

首先..创建一个子报表 - 我们称之为

“插入空行”

我喜欢为我的数据源使用存储过程 -

所以这是我的报告代码:

ALTER PROCEDURE [dbo].[report_getblankrows](@N AS INT)
AS
BEGIN
      DECLARE   @Numbers TABLE
      ( 
             Number INT IDENTITY(1,1) PRIMARY KEY CLUSTERED 
      ) 

      WHILE COALESCE(SCOPE_IDENTITY(), 0) < @N 
      BEGIN 
             INSERT @Numbers DEFAULT VALUES 
      END   
      SELECT * FROM @Numbers
END

它所做的几乎所有事情都是返回作为参数提供的数字的行。

现在在您的插入空白行报告中。使用它作为数据源并将数字字段放在详细信息行组中。

报告本身不需要很大......填充空间并将字体颜色设置为白色,因此它不可见。

现在在您的主报告中.. 假设您有一个名为“发票”的数据集(用于所有发票详细信息)。您显然有一个详细信息行..紧接在详细信息组之后,并且在您的“页脚”摘要之前(您需要向下推的位);将所有字段合并到一行中,然后在该行中插入一个子报表并将其指向“插入空白行”子报表。(如下图)

插入空行

现在转到子报表属性-> 参数并添加参数..

姓名 N

值 = 10 - countrows("发票")

这是试错部分。第一个数字 (10) 只是一个猜测开始.. 运行您的报告,看看发票摘要被向下推了多远.. 需要一些试验和错误才能获得正确的数字..空白行不够,增加第一个数字(10)...太多,减少它..以适应。

如果发票有足够的行来填充页面..返回的数字是负数..因此子报表不会填充任何行并且不会创建空格。

这是我能想到的最好的,并且已经使用了多年。祝你好运!


推荐阅读