如何使用Crystal Reports动态修改报表?

时间:2009-01-16 19:00:30

标签: c# dynamic crystal-reports

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

  1. 过滤器,以便仅显示他们感兴趣的数据(即,在何处使用)。
    • [例如,仅显示纽约市的建筑物]
  2. 指定显示的表格
    • [例如,显示建筑物和楼层,但不显示房间]
  3. 指定显示的字段
    • [例如,显示建筑物ID,编号,名称,地址和楼层编号]
  4. 更改部分的分组方式
    • [例如,按建筑用途分组,建造年份等]
  5. 更改图表中使用的字段
    • [例如,建筑物使用面积,建筑物使用占用面积,建筑物ID面积]
  6. 由于用户界面的灵活性,用户可以尝试报告许多不同类型的“问题”,我不想为每种可能的组合创建报告。有关我想要完成的示例,请参见下图。左侧的报告描述了按地区分组的建筑物。右边的报告描述了按网站分组的建筑物。

    Report Comparison http://img119.imageshack.us/img119/9052/performancereportcomparbt7.png

    编辑:

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

1 个答案:

答案 0 :(得分:3)

根据更新的类型(以及更新所关注的对象),您可以使用免费的craxdrt.dll(Designer Runtime Library。)或非免费的craxddrt.dll(Designer Design和Runtime Library)。我忘记了细节,但你肯定会在网上找到它们。

您的问题:

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