【问题标题】:Column repeat direction in microsoft report viewer微软报告查看器中的列重复方向
【发布时间】:2016-04-24 21:07:54
【问题描述】:

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

当前情景

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

我的要求

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

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

它将节省纸张。例如,如果用户按照当前场景仅生成 4 张身份证,它将在第 1 列中生成 4 张身份证,并且整个页面空间都被浪费了,因为我无法重新使用剩余的空间。

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

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

【问题讨论】:

  • 我假设您的卡片是报告中的行?如果是这样,您能否发布生成每个身份证的代码?

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


【解决方案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 是偶数

因此,您可能希望按照以下方式重新调整您放置物品的顺序。这是从 0 到 9 的项目的 index(从 0 开始遵循 C# 典型数字索引器),您可以执行以下操作:

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

您应该能够正确放置Cards

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

【讨论】:

    【解决方案2】:

    创建一个矩阵

    将您的行分组定义为

    =Ceiling(Fields!CardNo.Value/2)
    

    将列分组定义为

    =Fields!CardNo.Value Mod 2
    

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

    现在,当您运行报告时。你会得到你想要的结果

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

    【讨论】:

      【解决方案3】:

      另一个答案。这将适用于您的桌子上的组或没有组。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-30
        • 1970-01-01
        • 1970-01-01
        • 2013-02-14
        • 2017-04-23
        • 1970-01-01
        相关资源
        最近更新 更多