2012-06-14 125 views
0

我有一个使用Crystal Reports for VS 2010的C#2010应用程序。我的报表的目的是显示一个人每天应该在一个或多个星期的哪一天。格式是这样的:水晶报表多个表问题

enter image description here

请注意,它显示成对的,而不是一般的头一个表。

它使用包含两个DataTable的DataSet,一个用于标题日期,另一个用于位置。

问题是如果我在每个DataTable中有n个项目,报告将显示n^2对标题/位置而不是n。该模式类似于两张表的笛卡尔乘积。

我认为这可能与报告的数据库专家中的链接部分有关,但我无法解决它。它现在不包含任何链接。

我使用DataSet看起来是这样的:

enter image description here

+0

发布相关表和您正在使用的查询的关系的屏幕截图。 – craig

+0

它们之间没有关系。我认为这可能是问题,但我没有设法解决它......不知道你的意思是通过查询。我编辑了原文,并添加了DataSet的外观。 –

回答

1

为什么你需要一个表头?你想达到什么目的?

为什么不在周表的开始日期添加一个日期(StartOfWeek)到WeekTable?如果您有该日期,则每个列标题都将是一个公式字段,该公式字段根据StartOfWeek字段计算日期。非常容易,它消除了您正在经历的笛卡尔产品。

** **编辑

会有7个公式(每个天):

//{@Sunday} 
DateAdd("d", 0, {WeekTable.StartOfWeek}) 

... 

//{@Saturday} 
DateAdd("d", 7, {WeekTable.StartOfWeek}) 

各字段添加到页标题部分和格式为期望的(它们是日期值)。

+0

因为我需要的头像是“6月21日星期一”。有没有办法使用您建议的方式在此表单中显示它? –

+0

工作就像一个魅力!非常感谢! –

0

您可能需要稍微解释一下什么进一步的“头日期”是。但从你说的话他们没有链接到主要数据,在这种情况下,我可能会在头中使用子报表。

1

您需要链接表格才能得到n行。

理想:

  • 添加了独特ID列到Headers表。使它成为一个主键,并且是一个自动递增的身份。
  • HeaderID列添加到WeekTable表中,并将其设置为ID列中的Headers表的外键。

Headers表现在应该只包含每周一列,所以如果你有四名员工,他们都将会达到一个给定的一周相同HeaderID

+0

尽管它可能应该起作用,但它没有。试着按照你的说法,甚至做了一些修改,但仍然没有奏效。谢谢您的帮助。 –