diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseTextItem.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseTextItem.cs index 8b0dc34e53..ce13240666 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseTextItem.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseTextItem.cs @@ -41,6 +41,7 @@ namespace ICSharpCode.Reports.Core TextStyleDecorator st = this.CreateItemStyle(); ExportText item = new ExportText(st,false); item.Text = this.text; + item.Expression = this.Expression; return item; } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs index fe4b27560e..1f1659b4d1 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs @@ -303,33 +303,20 @@ foreach (var element in section.Items) private static void EvaluateRecursive (IExpressionEvaluatorFacade evaluatorFassade,ExporterCollection items) { - foreach (BaseExportColumn be in items) { + foreach (BaseExportColumn exportColumn in items) { - IExportContainer ec = be as IExportContainer; + IExportContainer ec = exportColumn as IExportContainer; if (ec != null) { if (ec.Items.Count > 0) { EvaluateRecursive(evaluatorFassade,ec.Items); } } - /* - IReportExpression expr = be as IReportExpression; - if (expr != null) - { - if (EvaluationHelper.CanEvaluate(expr.Text)) { - expr.Text = evaluatorFassade.Evaluate(expr.Text); - } - } - */ - - ExportText et = be as ExportText; - - if ((et != null) && (!String.IsNullOrEmpty(et.Text))) { - if (EvaluationHelper.CanEvaluate(et.Text)) { - et.Text = evaluatorFassade.Evaluate(et.Text); - } + + IReportExpression expressionItem = exportColumn as IReportExpression; + if (expressionItem != null) { + EvaluationHelper.EvaluateItem(evaluatorFassade,expressionItem); } - } } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Decorators/TextStyleDecorator.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Decorators/TextStyleDecorator.cs index 201a0b76e2..c35692b557 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Decorators/TextStyleDecorator.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Decorators/TextStyleDecorator.cs @@ -12,7 +12,6 @@ namespace ICSharpCode.Reports.Core.Exporter public class TextStyleDecorator:BaseStyleDecorator { private Font font; - private StringFormat stringFormat; private StringTrimming stringTrimming; private ContentAlignment contentAlignment; diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/ExportColumns/ExportText.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/ExportColumns/ExportText.cs index 64d23a0115..4671d8ed16 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/ExportColumns/ExportText.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/ExportColumns/ExportText.cs @@ -12,14 +12,11 @@ namespace ICSharpCode.Reports.Core.Exporter { /// /// Description of LineItem. /// - public class ExportText :BaseExportColumn{ - - private string text; + public class ExportText :BaseExportColumn,IReportExpression + { #region Constructors - - public ExportText (BaseStyleDecorator itemStyle,bool isContainer):base(itemStyle,isContainer) { } @@ -51,10 +48,10 @@ namespace ICSharpCode.Reports.Core.Exporter { iTextSharp.text.Rectangle r = base.ConvertToPdfRectangle(); columnText.SetSimpleColumn(r.Left, r.Top , r.Left + r.Width,r.Top - r.Height,pdfFormat.Leading,pdfFormat.Alignment); - string formatedText = this.text; + string formatedText = this.Text; if (!String.IsNullOrEmpty(StyleDecorator.FormatString)) { - formatedText = StandardFormatter.FormatOutput(this.text,this.StyleDecorator.FormatString, + formatedText = StandardFormatter.FormatOutput(this.Text,this.StyleDecorator.FormatString, this.StyleDecorator.DataType,String.Empty); } @@ -95,22 +92,15 @@ namespace ICSharpCode.Reports.Core.Exporter { base.DrawItem(graphics); base.Decorate(graphics); - TextDrawer.DrawString(graphics, this.text,this.StyleDecorator); + TextDrawer.DrawString(graphics, this.Text,this.StyleDecorator); } #endregion - public string Text - { - get { - return text; - } - set { - text = value; - } - } + public string Text {get;set;} + public string Expression {get;set;} public new TextStyleDecorator StyleDecorator { @@ -125,7 +115,7 @@ namespace ICSharpCode.Reports.Core.Exporter { public override string ToString() { - return this.text; + return this.Text; } } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/EvaluationHelper.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/EvaluationHelper.cs index 51f7cac238..b6541bb9a7 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/EvaluationHelper.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/EvaluationHelper.cs @@ -10,6 +10,7 @@ using System; using ICSharpCode.Reports.Core; using ICSharpCode.Reports.Core.Exporter; using ICSharpCode.Reports.Core.Interfaces; +using SimpleExpressionEvaluator; namespace ICSharpCode.Reports.Expressions.ReportingLanguage { @@ -28,14 +29,14 @@ namespace ICSharpCode.Reports.Expressions.ReportingLanguage public static IExpressionEvaluatorFacade CreateEvaluator (ISinglePage singlePage,IDataNavigator dataNavigator) { if (singlePage == null) { - + throw new ArgumentNullException("singlePage"); } - /* + /* if (dataNavigator == null) { throw new ArgumentNullException("dataNavigator"); } - * */ + * */ singlePage.IDataNavigator = dataNavigator; IExpressionEvaluatorFacade evaluatorFacade = new ExpressionEvaluatorFacade(singlePage); return evaluatorFacade; @@ -49,12 +50,28 @@ namespace ICSharpCode.Reports.Expressions.ReportingLanguage if (container != null) { EvaluateReportItems(evaluator,container.Items); } - BaseTextItem textItem = column as BaseTextItem; - if (textItem != null) { - textItem.Text = evaluator.Evaluate(textItem.Text); + + IReportExpression expressionItem = column as IReportExpression; + if (expressionItem != null) { + EvaluateItem(evaluator,expressionItem); } } } + + public static void EvaluateItem( IExpressionEvaluatorFacade evaluator,IReportExpression expressionItem) + { + string expr = String.Empty; + if (expressionItem != null) + { + if (!String.IsNullOrEmpty(expressionItem.Expression)) { + expr = expressionItem.Expression; + } else { + expr = expressionItem.Text; + } + } + + expressionItem.Text = evaluator.Evaluate(expr); + } public static void EvaluateRow(IExpressionEvaluatorFacade evaluator,ExporterCollection row) @@ -64,17 +81,17 @@ namespace ICSharpCode.Reports.Expressions.ReportingLanguage if (container != null) { EvaluateRow(evaluator,container.Items); } - ExportText textItem = column as ExportText; - if (textItem != null) { - textItem.Text = evaluator.Evaluate(textItem.Text); + IReportExpression expressionItem = column as IReportExpression; + if (expressionItem != null) { + EvaluateItem(evaluator,expressionItem); } } } - public static bool CanEvaluate (string expressionn) + public static bool CanEvaluate (string expression) { - if ((!String.IsNullOrEmpty(expressionn)) && (expressionn.StartsWith("=",StringComparison.InvariantCultureIgnoreCase))) { + if ((!String.IsNullOrEmpty(expression)) && (expression.StartsWith("=",StringComparison.InvariantCultureIgnoreCase))) { return true; } return false; diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/ExpressionEvaluatorFacade.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/ExpressionEvaluatorFacade.cs index fd2fe5fb68..209affd732 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/ExpressionEvaluatorFacade.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/ExpressionEvaluatorFacade.cs @@ -34,12 +34,8 @@ namespace ICSharpCode.Reports.Expressions.ReportingLanguage { try { if (EvaluationHelper.CanEvaluate(expression)) { - IExpression compiled = compiler.CompileExpression(expression); - this.context.ContextObject = this.SinglePage; - if (compiled != null) { - return (compiled.Evaluate(context)).ToString(); - } + return EvaluateExpression(expression); } } catch (Exception e) { expression = e.Message; @@ -49,24 +45,13 @@ namespace ICSharpCode.Reports.Expressions.ReportingLanguage return expression; } - static void WriteLogMessage(Exception e) - { - Console.WriteLine(""); - Console.WriteLine("ExpressionEvaluatorFacade.Evaluate"); - Console.WriteLine(e.Message); - Console.WriteLine(""); - } public string Evaluate (string expression, object row) { try { if (EvaluationHelper.CanEvaluate(expression)) { - IExpression compiled = compiler.CompileExpression(expression); - - this.context.ContextObject =row; - if (compiled != null) { - return (compiled.Evaluate(context)).ToString(); - } + this.context.ContextObject = row; + return EvaluateExpression (expression); } } catch (Exception e) { expression = e.Message; @@ -77,6 +62,25 @@ namespace ICSharpCode.Reports.Expressions.ReportingLanguage } + string EvaluateExpression(string expression) + { + IExpression compiled = compiler.CompileExpression(expression); + if (compiled != null) { + return (compiled.Evaluate(context)).ToString(); + } + return expression; + } + + + static void WriteLogMessage(Exception e) + { + Console.WriteLine(""); + Console.WriteLine("ExpressionEvaluatorFacade.Evaluate"); + Console.WriteLine(e.Message); + Console.WriteLine(""); + } + + private void FunctionStore (object sender,SimpleExpressionEvaluator.Evaluation.UnknownFunctionEventArgs e) {