【问题标题】:Crystal Reports -- combine multiple rows into one rowCrystal Reports -- 将多行合并为一行
【发布时间】:2019-10-04 00:48:50
【问题描述】:

例子:

RecordID ............ MemberName ........... SportID ......... Sport
1 .................. James ................. 1 ...............Hockey
1 .................. James ................. 2 ...............Football
2 .................. Jose .................. 5 ...............Basketball
3 .................. Jennifer .............. 2 ...............Football
3 .................. Jennifer .............. 4 ...............Dodgeball
4 .................. Jaqueline ............. 1 ...............Hockey
4 .................. Jaqueline ............. 3 ...............Baseball
4 .................. Jaqueline ............. 5 ...............Basketball
5 .................. John .................. 6 ...............Track

大家好,所以我正在尝试制作一个报告,该报告将为特定的 RecordID 输出单页数据,具体取决于我在参数字段中输入的 RecordID。为此,我在报告中为 RecordID 创建了一个参数字段,并为 RecordID 创建了一个组,到目前为止,其他表中的数据都很好(其中的排列方式类似于“名字”、“姓氏”等,对于给定的 RecordID)。

到目前为止一切都很好,因为这个特定表的数据排列方式与其他表不同。

我的问题是,报告每页只输出一个结果,而不是一次全部输出;所以,对于詹姆斯的例子,我只在第一页上选中了“曲棍球”框,然后在第二页上只选中了“足球”框,依此类推。

我希望此表的输出如下所示(对于 RecordID=1):

James:
[checkbox] Hockey.................. [empty checkbox] Dodgeball
[checkbox] Football................ [empty checkbox] Basketball
[empty checkbox] Baseball.......... [empty checkbox] Track

这就是我制作复选框的方式(设置为 Wingdings 字体):

If {RecordID} = 1 Then

Chr(254)

Else

Chr(111)

谁能帮我解决这个问题?

编辑这是我老板尝试的解决方案(目前不起作用):

为每项运动声明一个变量

      Shared BooleanVar Hockey:=False;
Shared BooleanVar Football:=False;
Shared BooleanVar Basketball:=False;
Shared BooleanVar Baseball:=False;
Shared BooleanVar Basketball:=False;
Shared BooleanVar Track:=False;

每个变量的这个:

Shared BooleanVar Hockey; 
        If {SportID} = 1 Then 
        Sport=True 

这个是复选框:

Shared BooleanVar Hockey;
If Hockey = True Then
    Chr(254)

【问题讨论】:

  • 你可以展示你的设计吗?您的复选框在组标题部分吗?
  • 很遗憾,我认为我无法展示设计。复选框当前不在组标题中。我为 RecordID 设置了 GH#1,然后为 Sport ID 创建了一个 GH#2。复选框位于 Group Header #2 (Sport ID) 下方的详细信息部分。我是 Crystal Reports 的新手,所以如果我没有提供足够的信息,我深表歉意。感谢您的帮助!

标签: crystal-reports crystal-reports-2016


【解决方案1】:

如果我理解的话,你的结构是这样的:

按 RecordId 分组 按 SportId 分组 包含所有复选框的详细信息部分

所以,报告选择 RecordId 1,然后选择 SportId 1。所以,第一次出现的详细信息部分中的数据是:

RecordID ...... 会员名 ...... SportID ...... Sport 1 .... 詹姆斯 .................... 1 .... ...曲棍球

然后,继续 RecordId 1,并选择下一个 SportId,即 2。因此,第一次出现的详细信息部分中的数据是:

RecordID ...... 会员名 ...... SportID ...... Sport 1 .... 詹姆斯 .................... 2 .... ...足球

然后,报告选择下一个 RecordId (2),然后选择下一个 SportId (5)。所以,第一次出现的细节部分的数据是:

RecordID ...... 会员名 ...... SportID ...... Sport 2 ................. 何塞 .................. 5 ...... ....篮球

你能看到现在发生了什么吗? (如果我理解你的话)。

它总是会以这种方式检查一项运动。

我会尝试以下解决方案。我的意思是,如果你只有这 6 项运动,那么你知道这些运动对你有用。

  1. 仅按 RecordId 分组。按 SportId 删除组。
  2. 将复选框放在组页脚中。
  3. 计算每项运动的出现次数。为每项运动使用一个跑步总场。记得在 RecordId 更改时重置。
  4. 当每项运动的计数器大于零时,使用公式检查该运动的复选框。

如果您在运行总计字段方面需要帮助,或者我误解了问题,请告诉我。

已编辑:如何创建运行总计字段(第 3 步)

  1. 在“Field Explorer”上,右键单击“Running Total Fields”,然后单击“New...”。
  2. 给它起个好听的名字(是的,名字很重要):例如“HockeyCounter”。
  3. 设置“要汇总的字段”=“SportId”。
  4. 设置“摘要类型”=“计数”。
  5. 使用公式按钮设置“评估”:
    {YourTableName.SportID} = 1 //其中 1 是曲棍球 SportId
  6. 设置“重置”=“组更改时”、“组 #1”(RecordId)。
  7. 将全新的运行总计字段拖到组 #1 页脚部分。
  8. 对其他运动重复这些步骤(那会很无聊,抱歉)。

我不确定它是否对您有帮助,但您可以查看this post,其中包含更多关于运行总计字段的信息。

【讨论】:

  • 我想你清楚我要描述的内容。谢谢你的解释——它帮助我更好地理解了这个问题!我知道所有的“运动”(总共有 7 个运动 ID)。显然我可以执行第一步和第二步,但我完全不确定第 3 步,除了我可能需要为每个运动 ID 声明一个变量。 (我还不明白如何使用大多数功能)。我已经添加了我老板试图使用的解决方案……这和你的意思相似吗?谢谢!
  • 是的,我相信它具有相同的效果。我更喜欢使用运行总计字段,但这只是一种偏好。
  • 他尝试的解决方案目前实际上不起作用——也许是正确放置字段的问题?你能告诉我如何使用运行总计字段吗?我不知道自己怎么样。同样,尝试的解决方案目前不起作用。谢谢!
  • 您好!谢谢你,我没有意识到 Running Total Field 只是另一种字段类型。我已经阅读了另一篇文章,它确实很有帮助,但我现在想知道我应该如何区分每项运动的跑步总场?该表已设置,因此每个recordID都有多个SportID,因此当我为SportID创建运行总计字段并将其放在组页脚中时,我想我只是计算给定的SportID的组合数记录(例如,它只给出数字“18”)......我该如何实现呢?谢谢!
  • 是的,对不起,我忘了提。我将更改“评估”选项。查看版本。
猜你喜欢
  • 2011-06-21
  • 1970-01-01
  • 2012-12-29
  • 1970-01-01
相关资源
最近更新 更多