1

我想知道我可以动态修改现有的 Crystal Report (使用 C# 和 Crystal Reports 2008),以便它可以使用相同的布局报告根本不同的数据(来自同一数据库)。原因是我们正在构建一个允许用户指定的应用程序:

  1. 一个过滤器,以便只显示他们感兴趣的数据(即 where 子句)。
    • [例如,仅显示纽约市的建筑物]
  2. 指定显示哪些表
    • [例如,显示建筑物和楼层,但不显示房间]
  3. 指定显示哪些字段
    • [例如,显示建筑物编号、编号、名称、地址和楼层号]
  4. 更改部分的分组方式
    • [例如,按建筑用途、建造年份等分组]
  5. 更改图表中使用的字段
    • [例如,按建筑物用途划分的面积、按建筑物用途划分的占用率、按建筑物 ID 划分的面积]

由于 UI 的灵活性,用户可以尝试报告许多不同类型的“问题”,我不想为每个可能的组合创建报告。有关我正在尝试完成的示例,请参见下图。左侧的报告描绘了按区域分组的建筑物。右侧的报告描绘了按地点分组的建筑物。

报告比较 http://img119.imageshack.us/img119/9052/performancereportcomparbt7.png

编辑:

我将尝试按照 Philippe Grondier 的建议使用报告参数来修改报告。我通过压制团体成功地做到了这一点。当一个组被抑制时,组会向上滑动以填充空白区域,以便所有内容都排成一行而没有空白。但是,对于单个文本对象,情况并非如此。当一个文本对象被抑制时,该字段的输出是一个空白区域。我想做的是抑制一个文本对象,这样整行都被抑制了,这将导致它下面的所有条目“碰撞”一行。我怎样才能做到这一点?

4

1 回答 1

3

根据更新的类型(以及更新所涉及的对象),您可以使用免费的 craxdrt.dll(设计器运行时库。)或非免费的 craxddrt.dll(设计器设计和运行时库)。我忘记了细节,但你肯定会在网上找到它们。

你的问题:

  1. 过滤器:可以在运行时更新报表对象的 SQLQueryString 或更新预先声明的参数,以便将它们添加到“Where”子句中。我认为添加参数仅限于 craxddrt dll,但可以使用 craxdrt dll 更新现有参数。您可以使用 CR 界面来更新这些参数,或者通过代码来完成:一种想法是在您的客户端界面中更新这些值(例如,从活动表单中)并以编程方式更新它们。请在此处查看示例。
  2. 隐藏表:我认为“隐藏表”没有任何意义,因为您需要在表中提供所有关系来计算汇总值。因此,您可以向您的用户建议查看/隐藏详细信息或查看/隐藏您的不同分组级别的可能性。这可以通过免费的 craxdrt 库和报告对象的“区域”收集/“抑制”方法轻松完成。
  3. 再一次,使用报告的不同区域似乎是最好的解决方案
  4. 我劝你不要考虑!更改数据顺序可能会导致不可预知的结果,特别是当您在组级别计算中间摘要时。根据您的要求,您可以坚持建议 (2),通过在报告上不显示特定组,或者,对于简单的表单(仅 1 组),在运行时以编程方式更新将在组定义中使用的参数公式。
  5. 回到提案(2):构建一个完整的报告,将所有预期的数据显示出来,然后隐藏/显示报告的不同部分。

这里还有另一个代码示例,向您展示如何在运行时将报表连接更改为不同的数据库/不同的表。

于 2009-01-20T11:17:15.117 回答