0

在我的 CR 中。我有很多子报告。对于我的所有子报表,我在 ReportHeaderSection2(报表头 b)中创建并插入了组名。在同一个报告标题部分中,我使用 Count 进行了总结。然后再次在 ReportFooterSection1 (Report Footer a) 中显示总计。与其他表相关,我创建了 6 条记录显示各种数据。

例如,我选择了一个名为 Employeees.MainDetails.EOAsianOrAsianBritish 的表,并将组名插入到 ReportHeaderSection2(报告标题 b)中。

现在,当在 CR 数据中没有选择任何内容时(例如,来自前端应用程序中的组合框,内置于 C#)显示类似这样的内容(例如种族数据)......

Asian or Asian British < this is just a header title
                 6
Total            6

我希望 CR 显示为...

Asian or Asian British 
                 0
Total            0

在报告选项中,我检查了将数据库 NULL 值转换为默认值和将其他 NULL 值转换为默认值。这没有用。我也尝试过以下...

我右键单击,对于 ReportHeaderSection2(报表页眉 b)和 ReportFooterSection1(报表页脚 a)中的 Employeees.MainDetails.EOAsianOrAsianBritish 的计数,出现格式对象 > 格式编辑器菜单 > 选择数字选项卡 > 单击自定义 > 如果为零则检查抑制和将零值显示为 0。这也不起作用?

编辑仅供参考

我在 Visual Studio 2010 中使用 CR。Crystal Report Viewer。

如果有人可以在这里帮助我,我将不胜感激。

非常感谢

更新 1

我右键单击汇总计数(CountofEOAsianOrAsianBritish),然后选择 Select Expert > Record > Selected is equal to 并输入以下公式...。

{Employeees.MainDetails.EOAsianOrAsianBritish } = "0"。这已经消除了 6 但是如果我尝试在前端输入一些文本值,没有值显示 CR?所以我正在调查它。

更新 2

在我的 Comboox 中,我有我输入的集合列表。我故意在开头包含一个空白,然后列出了集合。CR 可能会选择这个。我想要一个公式,所以 CR 不会计算空白,除非我在汇总计数、CountofEOAsianOrAsianBritish 中做错了什么

更新 3

我尝试了 Nick 解决方案,但我得到 ) 丢失,是 Visual Studio 2010 中缺少 DLL。

更新 4

如果我这样做... (not Isnull({Employeees.MainDetails.EOAsianOrAsianBritish})) 那么 CR 将显示以下输出

Asian or Asian British
                    2
Bangladeshi         1
Indian              1
Pakistani           2
Total:              6

这是不正确的,正确的输出应该显示....

Asian or Asian British
Bangladeshi         1
Indian              1
Pakistani           2
Total:              4

所以这告诉我的是 CR 正在计算组合框中的空白字段。所以我想知道在CR中是否可以做任何事情?还需要修剪,因此当有空白行时,行不会显示空白行。

更新 5

我努力了...

if isnull({Employeees.MainDetails.EOAsianOrAsianBritish}) then
0 else ({Employeees.MainDetails.EOAsianOrAsianBritish})

这给了我以下错误

“这里需要一个数字”

在 else 语句中突出显示 Employeees.MainDetails.EOAsianOrAsianBritish?在 else 语句中,公式不应该计算种族然后在页脚中显示总数吗?

缺口

我得到的输出是

Asian or Asian British
                    2     
Total:              2

什么时候应该显示...

Asian or Asian British
Indian              1
Pakistani           3
Total:              4
4

2 回答 2

2

在你的公式中试试这个:

If(Isnull({Employeees.MainDetails.EOAsianOrAsianBritish})  or ({Employeees.MainDetails.EOAsianOrAsianBritish}) = "") then (
     false
)else(
   true
);
于 2013-05-28T15:08:39.060 回答
1

解决方案说明

这是一种用于创建具有子报表和子报表分组的报表的解决方案,这些分组具有然后传递到主报表的聚合值。

解决方案假设

  • 此解决方案假定您至少使用 Crystal Reports 2008(如果不是更新版本)。
  • 此解决方案假定您知道如何在主报表和子报表中正确连接数据源。
  • 此解决方案假定您拥有有效数据,并且您的目的是将数据分组到子报表中的两个不同级别,无需详细信息,并将结果传递给主报表。

解决方案指令顺序

  1. 创建子报告
  2. 创建指定组
  3. 创建类型组
  4. 隐藏细节
  5. 添加汇总/汇总字段
  6. 抑制不需要的组页眉/页脚
  7. 创建要传递给主报告的变量

解决方案

先决条件:让 Crystal Reports 设计器打开您的报表,并连接、登录和验证数据源。

创建子报告

  1. 使用子报告插入工具,命名您的子报告并点击报告向导
  2. 添加您的数据源并单击完成
  3. 将子报表放在主报表的适当位置并设置其宽度
  4. (可选)右键单击并选择格式化子报告,然后转到边框选项卡以删除边框
  5. 双击子报表打开设计器
  6. 移除 Crystal 添加的所有字段
  7. 删除报告页眉和页脚上的额外部分

你现在有一个空白的子报告准备好了,接下来我们将开始我们的分组。

创建指定组

我们正在子报告中创建一个指定的组来限制数据量,这样我们就没有空行。

  1. 前往群专家
  2. 选择将过滤您的数据的字段并将其添加为一个组(例如 Employeees.MainDetails.EOAsianOrAsianBritish)
  3. 单击选项按钮
  4. 从下拉列表中选择“指定的组顺序”进行组排序
  5. 单击指定组选项卡
  6. 单击“新建”并输入该组的标题(例如“Asian or Asian British”)
  7. 选择一个比较运算符(例如“等于”)并为其指定要过滤的值(例如 1)单击“确定” 注意:您可以添加其他指定组或通过单击新选项卡向此指定组添加更多在组名称屏幕中添加“或”部分。
  8. 返回组屏幕,转到“其他”选项卡
  9. 选择“丢弃所有其他” 注意:这只是丢弃此子报告的记录,而不是主报告。
  10. 点击“确定”

现在应该创建您指定的组,该组将仅过滤您想要在子报表中的值,并且您的标题应该添加到组标题中。

创建类型组

  1. 返回组专家
  2. 根据您要计算的另一个字段(例如种族)添加另一个组
  3. (可选)如果您的数据源未提供,请转到“选项”并单击“选项”选项卡以根据字段值为您的组指定不同的名称注意:如果需要,我可以向您展示如何执行此操作,但就目前而言,我假设“印度”之类的东西已经作为分组选项存在。
  4. 单击“确定”,您现在应该有一个带有组标题的第二组
  5. (可选)取消第二组标题的粗体并将其稍微向右移动以在上述标题组下方缩进
  6. 隐藏此组的页脚,因为它不需要

您现在应该有两个组,一个带有您的主要组标题,另一个带有您的摘要组标题。现在,我们需要抑制细节。

抑制细节

这很重要,否则你会得到一堆不需要的数据行。右键单击详细信息部分行标题并选择“抑制”。此外,不要显示报表页眉和页脚,因为我们不需要它们。

添加汇总/汇总字段

现在,我们将创建汇总字段,例如,进行计数。

  1. 单击“添加摘要”按钮
  2. 选择您要汇总的字段(例如员工编号或区分每个明细行的内容)
  3. 选择汇总类型(例如计数)
  4. 选择要添加摘要的组或(如我建议的那样)选中“添加到所有组级别”
  5. 单击“确定”,应将汇总字段添加到每个组级别的页脚 注意:这可能会取消抑制某些行,但您可以重新执行此操作。
  6. 将第二个分组的摘要从页脚移动到页眉并放置在您希望它显示的位置
  7. 在主组的页脚添加一个文本字段,显示“总计”并适当放置
  8. (可选)将顶部分组的摘要移动到其页脚中,以与次要组标题中的摘要对齐
  9. 删除报告页脚中的摘要
  10. 重新抑制报表页脚和次要组页脚

从技术上讲,您的子报告已完成。如果您只预览子报告本身,它应该显示正确的汇总数据。

创建要传递到主报告的变量

这是可选的,但很多时候,您希望将此值传递给主报告。

  1. 创建一个新的公式字段,将其命名为您想要的任何名称,但与其含义相关的名称会很有帮助
  2. 公式应该是Shared NumberVar TotalCount := Sum({EmployeeNum}, {EOAsianOrAsianBritish}) 注意:这样做是创建一个共享的 NumberVar,然后您可以稍后在主报告中使用它。为了让您自己更轻松,:=您可以滚动报告字段中的汇总字段(例如,在主组上计数),然后双击它以将其添加到公式中,而不是在后面输入所有内容。
  3. 点击保存
  4. 将字段添加到隐藏的报表页脚

现在,您有一个可以传递给主报告的总数。需要注意的一些事情:整个子报告可以在其内部被抑制,并且仍然将数字传递给主报告。但是,如果它在主报告中被抑制,则该数字不会通过。最后,主报告中公式字段的公式是Shared NumberVar TotalCount,这将为您提供一个可以使用的数字。

结论

是的,我知道有一些记录选择技术也可用于完成子报告中的数据限制。但是,如果需要,此方法允许您拥有一个或多个组,而不仅仅是子报表的报表页眉和页脚。

如果您有任何问题随时问。我知道这是很多信息要扔给你。

于 2013-05-30T14:44:31.507 回答