微软报表查看器中的列重复方向

时间:2016-01-19 11:47:09

标签: c# reporting-services reportviewer microsoft-reporting

我使用Windows窗体生成使用c#和Microsoft报表查看器的身份证。一切都工作正常,除了我在Microsoft报表查看器中找不到列重复方向。

当前情景

我的报告纸张尺寸为A4。每页最多可显示10张个人卡。页面中有2列。每列显示5张卡片。它是生成卡,如图所示。列重复方向是垂直的。首先列出第1列(1-5),然后列出第2列(6-10)。

enter image description here

我的要求

我希望报告列重复方向水平,如下图所示。首先显示1然后是2和3和4,依此类推。

enter image description here

为什么我要水平显示而不是垂直显示?

它会保存纸张。例如,如果用户仅根据当前场景生成4个身份证,则它将在第1列中生成4张卡,并且因为我无法重复使用左侧空间而浪费整个页面空间。

通过将列方向重复到水平方向,将显示4张卡,如第1列,第1和第3列以及第2列,将显示第2和第4张卡。然后我可以剪纸并在以后重复使用。

我搜索了很多但找不到任何解决方案。任何建议,评论或链接都会有所帮助。我不能使用任何其他报告。提前谢谢。

3 个答案:

答案 0 :(得分:7)

创建矩阵

将行分组定义为

=Ceiling(Fields!CardNo.Value/2)

将列分组定义为

=Fields!CardNo.Value Mod 2

您的报告设计将如下所示。 外部组仅用于说明目的,但您可以将其删除。

enter image description here

现在运行报告时。您将获得您正在寻找的结果

enter image description here

没有任何分组页眉和页脚。您的报告输出将是

enter image description here

答案 1 :(得分:1)

这个问题可以看作是您需要重新调整项目的映射问题,如下所示:

n -> f(n)
----------
1 -> 1
2 -> 6
3 -> 2
4 -> 7
5 -> 3
6 -> 8
7 -> 4
8 -> 9
9 -> 5
10 -> 10

n is the original position
f(n) is the mapped position

可以看出它遵循这样的模式:

  1. f(n) = floor(n / 2) + 1如果n是奇数
  2. f(n) = (10 + n) / 2如果n是偶数
  3. 因此,您可能希望以下列方式重新调整您的物品订单。从0-9开始给出项目的index(从0开始跟随C#典型数字索引器),你可以这样做:

    index++;
    int newIndex = index % 2 == 0 ? (10 + index) / 2 : index / 2 + 1;
    newIndex--;
    

    您应该能够正确放置Cards

    注意:如果没有给出实际代码,这是为了说明如何从概念上解决问题。

答案 2 :(得分:1)

另一个答案。这可以在您的桌子上使用或不使用组。

在报告上并排放置两张桌子。将第一个表设置为从第一个记录开始并跳过1的分区的查询。接下来,将第二个表设置为从跳过第二个记录开始分区的查询。