代码之家  ›  专栏  ›  技术社区  ›  Rory

如何以编程方式将Crystal Reports公式从Crystal语法更改为基本语法-在Visual Studio 2005中

  •  1
  • Rory  · 技术社区  · 16 年前

    我想以编程方式在很多报表中更改公式,比如 this question 但是我也需要在crystal语法和基本语法之间改变公式。在对象模型中,我看不到任何实现这一点的方法。有可能吗?

    也就是说,我有一个名为“句点”的公式,它已经存在于大量的报告中,并且目前它是在Crystal语法中定义的。我想将公式设置为基本语法,并提供公式的更新文本。我不需要自动将当前定义从Crystal转换为Basic;我已经有了新的公式文本。

    如果我简单地遍历所有报表,打开它们,然后设置FormulaFieldDefinition的文本属性,那么公式仍然设置为“Crystal Syntax”,并且无法正确计算。目前我唯一的解决方案是手动打开每个报表,编辑公式,将下拉列表从Crystal语法更改为基本语法。

    3 回复  |  直到 10 年前
        1
  •  0
  •   Axarydax    16 年前

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

        2
  •  0
  •   Rory    16 年前

    我相信,@codebymouth证实这是不可用的。所以对于和我在同一条船上的任何人来说,有很多报告要更新:享受手动过程,希望你永远不要改变!

        3
  •  0
  •   loona70    10 年前

    您可以这样遍历报表对象模型。 只需更改公式和公式名称。

    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;
        }