Microsoft 报表查看器中的列重复方向
Column repeat direction in microsoft report viewer
我正在使用 windows 表单使用 c# 和 Microsoft 报表查看器生成身份证。一切正常,除了我在 Microsoft 报表查看器中找不到列重复方向。
当前情况
我的报告纸张尺寸是A4。每个页面最多可以显示 10 张单独的卡片。页面中有 2 列。每列显示 5 张牌。如图所示,它正在生成卡片。列重复方向是垂直的。它首先列出第 1 列 (1-5),然后列出第 2 列 (6-10)。
我的要求
我希望报表列的重复方向像下图一样水平。首先显示 1 然后显示 2 和 3 和 4 等等。
为什么我要水平显示而不是垂直显示?
会节省纸张。例如,如果用户只生成 4 张身份证,那么根据当前情况,它将在第 1 列生成 4 张卡片,整个页面 space 被浪费了,因为我不能重新使用左边的 space .
通过水平重复列方向,4 张卡片将显示在第 1 列中,卡片 1 和 3,在第 2 列中,卡片 2 和 4 将显示。然后我可以把纸剪下来以后再用。
我已经搜索了很多但找不到任何解决方案。任何建议、评论或链接都会有所帮助。我不能使用任何其他报告。提前致谢。
这个问题可以看作是映射问题,您需要按照以下方式重新排列项目:
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
可以看出它遵循这样一个模式:
f(n) = floor(n / 2) + 1
如果 n 是奇数
f(n) = (10 + n) / 2
如果 n 是偶数
因此,您可能希望按照以下方式重新排列您放置物品的顺序。给定 index
从 0-9 的项目(从 0 开始遵循 C# 典型的数字索引器),你可以这样做:
index++;
int newIndex = index % 2 == 0 ? (10 + index) / 2 : index / 2 + 1;
newIndex--;
而且您应该能够正确放置 Cards
。
注意:没有实际给出代码,这是为了展示如何从概念上解决问题。
创建矩阵
将您的行分组定义为
=Ceiling(Fields!CardNo.Value/2)
将您的列分组定义为
=Fields!CardNo.Value Mod 2
您的报表设计将如下所示。 外部组仅用于说明目的,但您可以将其删除。
现在当你运行报告的时候。你会得到你想要的结果
没有任何分组页眉和页脚。您的报告输出将是
另一个答案。这将在您的 table 上使用或不使用组。
在您的报告中并排放置两个 table。将第一个 table 设置为从第一条记录开始分区并跳过 1 的查询。接下来,将第二个 table 设置为从第二条记录开始分区并跳过 1 的查询。
我正在使用 windows 表单使用 c# 和 Microsoft 报表查看器生成身份证。一切正常,除了我在 Microsoft 报表查看器中找不到列重复方向。
当前情况
我的报告纸张尺寸是A4。每个页面最多可以显示 10 张单独的卡片。页面中有 2 列。每列显示 5 张牌。如图所示,它正在生成卡片。列重复方向是垂直的。它首先列出第 1 列 (1-5),然后列出第 2 列 (6-10)。
我的要求
我希望报表列的重复方向像下图一样水平。首先显示 1 然后显示 2 和 3 和 4 等等。
为什么我要水平显示而不是垂直显示?
会节省纸张。例如,如果用户只生成 4 张身份证,那么根据当前情况,它将在第 1 列生成 4 张卡片,整个页面 space 被浪费了,因为我不能重新使用左边的 space .
通过水平重复列方向,4 张卡片将显示在第 1 列中,卡片 1 和 3,在第 2 列中,卡片 2 和 4 将显示。然后我可以把纸剪下来以后再用。
我已经搜索了很多但找不到任何解决方案。任何建议、评论或链接都会有所帮助。我不能使用任何其他报告。提前致谢。
这个问题可以看作是映射问题,您需要按照以下方式重新排列项目:
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
可以看出它遵循这样一个模式:
f(n) = floor(n / 2) + 1
如果 n 是奇数f(n) = (10 + n) / 2
如果 n 是偶数
因此,您可能希望按照以下方式重新排列您放置物品的顺序。给定 index
从 0-9 的项目(从 0 开始遵循 C# 典型的数字索引器),你可以这样做:
index++;
int newIndex = index % 2 == 0 ? (10 + index) / 2 : index / 2 + 1;
newIndex--;
而且您应该能够正确放置 Cards
。
注意:没有实际给出代码,这是为了展示如何从概念上解决问题。
创建矩阵
将您的行分组定义为
=Ceiling(Fields!CardNo.Value/2)
将您的列分组定义为
=Fields!CardNo.Value Mod 2
您的报表设计将如下所示。 外部组仅用于说明目的,但您可以将其删除。
现在当你运行报告的时候。你会得到你想要的结果
没有任何分组页眉和页脚。您的报告输出将是
另一个答案。这将在您的 table 上使用或不使用组。
在您的报告中并排放置两个 table。将第一个 table 设置为从第一条记录开始分区并跳过 1 的查询。接下来,将第二个 table 设置为从第二条记录开始分区并跳过 1 的查询。