【问题标题】:How to programmatically change a Crystal Reports formula from Crystal Syntax to Basic Syntax - in Visual Studio 2005如何以编程方式将 Crystal Reports 公式从 Crystal 语法更改为基本语法 - 在 Visual Studio 2005 中
【发布时间】:2010-03-05 12:40:16
【问题描述】:

我想以编程方式更改大量报告中的公式,例如 this question,但我还需要更改 Crystal 语法和基本语法之间的公式。我在对象模型中看不到任何方法可以做到这一点。有可能吗?

即我有一个名为“Period”的公式,它已经存在于很多报告中,目前在 Crystal Syntax 中定义。我想将公式设置为基本语法并提供公式的更新文本。我不需要自动将当前定义从水晶转换为基本;我已经有了新的公式文本。

如果我只是循环浏览所有报告,打开它们,然后设置 FormulaFieldDefinition 的 Text 属性,那么公式仍然设置为“Crystal Syntax”并且不会正确评估。目前我唯一的解决方案是手动打开每个报表,编辑公式,将下拉菜单从 Crystal Syntax 更改为 Basic Syntax。

【问题讨论】:

  • 目前不可能 - 语法类型不是任何地方的公开属性。但是你为什么要把它改成 VB 语法,只用这一个公式呢?
  • 因为我有一百多个报告,如果不需要,我无法面对手动打开它们。但现在我有了。

标签: c# visual-studio-2005 crystal-reports


【解决方案1】:

http://msdn.microsoft.com/en-us/library/ms225743%28VS.80%29.aspx 说 Crystal 语法和基本语法支持公式 - 它不会自动接受它们吗? 还是要在这两种语法之间进行转换?

【讨论】:

    【解决方案2】:

    我相信并且@CodeByMoonlight 确认这是不可用的。因此,对于与我在同一条船上需要更新许多报告的任何人:享受手动过程并希望您永远不必改回来!

    【讨论】:

      【解决方案3】:

      您可以像这样浏览报表对象模型。 只需更改公式和公式名称即可。

      public ReportDocument GetReport(DataSet ds)
          {
              const string formula = "WhileReadingRecords;" +
                                     "<<your formula>>";
      
      
              ReportDocument report = new InvoiceReport();
              report.SetDataSource(ds);
      
              // iterate report objects
              foreach (ReportObject ro in report.ReportDefinition.ReportObjects)
              {
      
                  if ((ro.Kind == ReportObjectKind.FieldObject && ro.Name == "<<FormuleName>>"))
                  {
                      ((FormulaFieldDefinition) ((FieldObject) o).DataSource).Text = formula;
                  }
              }
              return report;
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-18
        • 1970-01-01
        • 2013-12-12
        • 1970-01-01
        相关资源
        最近更新 更多