VS2010中的Crystal Reports XI - POID问题和多个表的显示信息

时间:2012-07-20 12:23:50

标签: c# visual-studio-2010 crystal-reports report

我在我的Crystal Report XI for VS2010中有3个表,现在就是这个场景:

3个表与POID链接在一起。

  • 表1
    • 数据:城市,日期,工厂名称,POID(例如1001)
    • 每个POID都有一条记录
  • 表2
    • 数据:阴影名称(例如蓝色),数量(例如123),POID(例如1001)
    • 每个POID都有一个或多个记录
  • 表3
    • 数据:样式编号(例如123),买方的采购订单编号(例如123),POID(例如1001)
    • 每个POID都有一个或多个记录

表2和表3是独立的,并且仅依赖于表1的POID。当表2和表3中的POID记录数不同时,问题就开始了。

在将表3添加到报告之前,我将报告分组在表1的POID上,并将表2记录信息放在报告的“详细信息”部分中。但是,现在我已经插入了表3记录,表2和表3记录保持重复。

例如:对于POID = 1001,有一个表1记录,三个表2记录和两个表3记录。因此,报告的结果是每个表2记录重复两次,每个表3记录重复三次。

我不希望他们重复自己。我希望它们显示在数据库中。

我使用C#,VS2010和SQLExpress2008将所有表数据用于POID组。

我希望这很清楚,你可以提供帮助。提前谢谢。

注意:我对这个问题进行了很多研究,最后在这里问了。

1 个答案:

答案 0 :(得分:3)

首先,我认为你错误地解释了对这样一个数据库的查询是什么样的。实际上,如果你将连接设置为像SELECT * FROM TABLE1 CROSS JOIN TABLE2 ON TABLE1.POID = TABLE2.POID CROSS JOIN TABLE3 ON TABLE2.POID = TABLE3.POID这样的东西,那么它实际上会给你一个数据库查询在视图中返回的内容,这意味着:如果有一个TABLE1记录,三个TABLE2记录和两个Table3记录,你' d选择TABLE1记录六次,每次TABLE2记录两次,总共六次,每次TABLE3记录三次,总共六次。所以,实际上,你正在返回6行,但报告中的所有内容都是FUBAR,因为你的布局如何。对TABLE1记录进行分组可能是您所做的唯一“正确”事情。

我认为在没有创建其他数据库对象的情况下处理此问题的最简单方法是子报表。希望这是有道理的,如果你愿意,我可以把图像放在一起,但你想要做的是:

  1. 在主报表中,使用主数据库对象作为数据源,在TABLE1上进行分组,并在组页眉或页脚(您的选择)中添加两个附加部分,并完全取消详细信息部分。
  2. 在添加到分组的第一个小节中,仅使用TABLE2作为数据源添加子报表,不使用分组并将TABLE2信息放在详细信息部分中。在您认为必要时,向报表页眉和页脚添加其他标题和摘要信息。
  3. 在添加到分组的第二个小节中,仅使用TABLE3作为数据源添加子报表,不使用分组并将TABLE3信息放在详细信息部分中。在您认为必要时,向报表页眉和页脚添加其他标题和摘要信息。
  4. 将所有其他信息添加到所需的页脚。
  5. 本质上它应该看起来像:

    • 主要报告 - 报告标题
    • 主要报告 - 页面标题
    • 主要报告 - 第1组标题
      • 第1组标题 - 第A节 - 表1记录信息
      • 第1组标题 - 第B节 - 子报告1
        • 子报告1 - 报告标题
        • 子报告1 - 详细信息 - TABLE2记录信息
        • 子报告1 - 报告页脚
      • 第1组标题 - 第C节 - 子报告2
        • 子报告2 - 报告标题
        • 子报告2 - 详细信息 - 表3记录信息
        • 子报告2 - 报告页脚
    • 主要报告 - 详情(抑制)
    • 主要报告 - 第1组页脚
    • 主要报告 - 报告页脚
    • 主要报告 - 页脚

    这将为每个TABLE1记录生成一个带有TABLE1标题的报告,后跟其TABLE2和TABLE3信息,而不会重复它们并让您发疯。

    这是否有意义或有帮助?