我从未使用过 Telerik,因此以下建议仅适用于 Crystal。
您可以通过至少两种不同的方式在 Crystal 中有条件地隐藏交叉表:
- 通过 Format 对话框(不是Cross-Tab 专家)- 右键单击 Crosstab,从菜单中选择 Format Cross-Tab...,
x-2
在 Format Editor 对话框的 Common 选项卡中按下 Suppress 旁边的按钮,然后输入适当的公式(类似于{?crosstab1s1}="n/a"
)。
- 通过将交叉表放置在其自己的子部分中并有条件地抑制子部分 - 在相关子部分的“报表设计器设计”选项卡中右键单击报表布局区域左侧的灰色区域,选择“部分专家”。 .. 从菜单中,按下
x-2
Section Expert 对话框的 Common 选项卡中 Suppress (No Drill-Down) 旁边的按钮,然后输入适当的公式。
我建议使用这两种方法中的后一种——抑制交叉表本身仍然会留下要显示的空白。
您还可以将每个交叉表放在它们自己的子报表中并有条件地抑制它们- 但是,这会引入额外的复杂性,此时似乎没有必要。
其他一些评论:
- Crystal 的参数比在 ASP 中可以实现的灵活得多,因此如果可能,请在 ASP 中选择所有参数并将参数传递给 Crystal。
- Crystal 对空值的处理有些尴尬,因此传递一个特定的值来指示不需要交叉表,而不是依赖于将参数评估为空值。
- 您的交叉表参数当前排列为交叉表 1 和交叉表 2,每个都包含或在第 1、2 和 3 节中。目前尚不清楚这是否意味着总共应该有六个交叉表,或者只有两个:
- 如果是前者,则不清楚如何指定行分组、列分组和汇总字段。
- 如果是后者,那么我建议将第 1、2 和 3 节重命名为行分组、列分组和汇总字段(因为我假设这就是这些要表示的内容)。
- 您当前有显示组总计和显示百分比选项 - 这些似乎适用于交叉表。这些选项可以在 Crystal 中指定,但不能在报表设计器中有条件地指定。
- 如果您能够访问 Crystal API,则应该可以在运行时以编程方式设置这些选项。
- 否则,如果您想为每个交叉表包含两个选项,您唯一的选择是将每个交叉表的四个版本添加到报告中,每个版本根据选择的选项有条件地抑制。(除非您别无选择,否则我不会推荐这种方法。)
- Crystal 无法处理动态数据结构(即在设计报表时必须知道数据结构),因此我建议根据指定的参数在 SQL 存储过程中生成结果集,其结构类似于:
Dataset structure
crosstab1Row
crosstab1Column
crosstab1SumValue
crosstab2Row
crosstab2Column
crosstab2SumValue
reportColumn1
reportColumn2
reportColumn3
reportColumn4
reportColumn5