Browse Source

ExportText is based on IReportExpression, Evaluation is done on Fields 'Expression' and 'Text'. 'Expression' precedes 'Text'

pull/15/head^2
peterforstmeier 15 years ago
parent
commit
afcca11550
  1. 1
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseTextItem.cs
  2. 25
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs
  3. 1
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Decorators/TextStyleDecorator.cs
  4. 26
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/ExportColumns/ExportText.cs
  5. 39
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/EvaluationHelper.cs
  6. 40
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/ExpressionEvaluatorFacade.cs

1
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseTextItem.cs

@ -41,6 +41,7 @@ namespace ICSharpCode.Reports.Core
TextStyleDecorator st = this.CreateItemStyle(); TextStyleDecorator st = this.CreateItemStyle();
ExportText item = new ExportText(st,false); ExportText item = new ExportText(st,false);
item.Text = this.text; item.Text = this.text;
item.Expression = this.Expression;
return item; return item;
} }

25
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) 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 != null)
{ {
if (ec.Items.Count > 0) { if (ec.Items.Count > 0) {
EvaluateRecursive(evaluatorFassade,ec.Items); EvaluateRecursive(evaluatorFassade,ec.Items);
} }
} }
/*
IReportExpression expr = be as IReportExpression; IReportExpression expressionItem = exportColumn as IReportExpression;
if (expr != null) if (expressionItem != null) {
{ EvaluationHelper.EvaluateItem(evaluatorFassade,expressionItem);
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);
}
} }
} }
} }

1
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 public class TextStyleDecorator:BaseStyleDecorator
{ {
private Font font; private Font font;
private StringFormat stringFormat; private StringFormat stringFormat;
private StringTrimming stringTrimming; private StringTrimming stringTrimming;
private ContentAlignment contentAlignment; private ContentAlignment contentAlignment;

26
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/ExportColumns/ExportText.cs

@ -12,14 +12,11 @@ namespace ICSharpCode.Reports.Core.Exporter {
/// <summary> /// <summary>
/// Description of LineItem. /// Description of LineItem.
/// </summary> /// </summary>
public class ExportText :BaseExportColumn{ public class ExportText :BaseExportColumn,IReportExpression
{
private string text;
#region Constructors #region Constructors
public ExportText (BaseStyleDecorator itemStyle,bool isContainer):base(itemStyle,isContainer) public ExportText (BaseStyleDecorator itemStyle,bool isContainer):base(itemStyle,isContainer)
{ {
} }
@ -51,10 +48,10 @@ namespace ICSharpCode.Reports.Core.Exporter {
iTextSharp.text.Rectangle r = base.ConvertToPdfRectangle(); iTextSharp.text.Rectangle r = base.ConvertToPdfRectangle();
columnText.SetSimpleColumn(r.Left, r.Top , r.Left + r.Width,r.Top - r.Height,pdfFormat.Leading,pdfFormat.Alignment); 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)) { 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); this.StyleDecorator.DataType,String.Empty);
} }
@ -95,22 +92,15 @@ namespace ICSharpCode.Reports.Core.Exporter {
base.DrawItem(graphics); base.DrawItem(graphics);
base.Decorate(graphics); base.Decorate(graphics);
TextDrawer.DrawString(graphics, this.text,this.StyleDecorator); TextDrawer.DrawString(graphics, this.Text,this.StyleDecorator);
} }
#endregion #endregion
public string Text public string Text {get;set;}
{
get {
return text;
}
set {
text = value;
}
}
public string Expression {get;set;}
public new TextStyleDecorator StyleDecorator public new TextStyleDecorator StyleDecorator
{ {
@ -125,7 +115,7 @@ namespace ICSharpCode.Reports.Core.Exporter {
public override string ToString() public override string ToString()
{ {
return this.text; return this.Text;
} }
} }

39
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;
using ICSharpCode.Reports.Core.Exporter; using ICSharpCode.Reports.Core.Exporter;
using ICSharpCode.Reports.Core.Interfaces; using ICSharpCode.Reports.Core.Interfaces;
using SimpleExpressionEvaluator;
namespace ICSharpCode.Reports.Expressions.ReportingLanguage namespace ICSharpCode.Reports.Expressions.ReportingLanguage
{ {
@ -28,14 +29,14 @@ namespace ICSharpCode.Reports.Expressions.ReportingLanguage
public static IExpressionEvaluatorFacade CreateEvaluator (ISinglePage singlePage,IDataNavigator dataNavigator) public static IExpressionEvaluatorFacade CreateEvaluator (ISinglePage singlePage,IDataNavigator dataNavigator)
{ {
if (singlePage == null) { if (singlePage == null) {
throw new ArgumentNullException("singlePage"); throw new ArgumentNullException("singlePage");
} }
/* /*
if (dataNavigator == null) { if (dataNavigator == null) {
throw new ArgumentNullException("dataNavigator"); throw new ArgumentNullException("dataNavigator");
} }
* */ * */
singlePage.IDataNavigator = dataNavigator; singlePage.IDataNavigator = dataNavigator;
IExpressionEvaluatorFacade evaluatorFacade = new ExpressionEvaluatorFacade(singlePage); IExpressionEvaluatorFacade evaluatorFacade = new ExpressionEvaluatorFacade(singlePage);
return evaluatorFacade; return evaluatorFacade;
@ -49,12 +50,28 @@ namespace ICSharpCode.Reports.Expressions.ReportingLanguage
if (container != null) { if (container != null) {
EvaluateReportItems(evaluator,container.Items); EvaluateReportItems(evaluator,container.Items);
} }
BaseTextItem textItem = column as BaseTextItem;
if (textItem != null) { IReportExpression expressionItem = column as IReportExpression;
textItem.Text = evaluator.Evaluate(textItem.Text); 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) public static void EvaluateRow(IExpressionEvaluatorFacade evaluator,ExporterCollection row)
@ -64,17 +81,17 @@ namespace ICSharpCode.Reports.Expressions.ReportingLanguage
if (container != null) { if (container != null) {
EvaluateRow(evaluator,container.Items); EvaluateRow(evaluator,container.Items);
} }
ExportText textItem = column as ExportText; IReportExpression expressionItem = column as IReportExpression;
if (textItem != null) { if (expressionItem != null) {
textItem.Text = evaluator.Evaluate(textItem.Text); 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 true;
} }
return false; return false;

40
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/ExpressionEvaluatorFacade.cs

@ -34,12 +34,8 @@ namespace ICSharpCode.Reports.Expressions.ReportingLanguage
{ {
try { try {
if (EvaluationHelper.CanEvaluate(expression)) { if (EvaluationHelper.CanEvaluate(expression)) {
IExpression compiled = compiler.CompileExpression<string>(expression);
this.context.ContextObject = this.SinglePage; this.context.ContextObject = this.SinglePage;
if (compiled != null) { return EvaluateExpression(expression);
return (compiled.Evaluate(context)).ToString();
}
} }
} catch (Exception e) { } catch (Exception e) {
expression = e.Message; expression = e.Message;
@ -49,24 +45,13 @@ namespace ICSharpCode.Reports.Expressions.ReportingLanguage
return expression; 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) public string Evaluate (string expression, object row)
{ {
try { try {
if (EvaluationHelper.CanEvaluate(expression)) { if (EvaluationHelper.CanEvaluate(expression)) {
IExpression compiled = compiler.CompileExpression<string>(expression); this.context.ContextObject = row;
return EvaluateExpression (expression);
this.context.ContextObject =row;
if (compiled != null) {
return (compiled.Evaluate(context)).ToString();
}
} }
} catch (Exception e) { } catch (Exception e) {
expression = e.Message; expression = e.Message;
@ -77,6 +62,25 @@ namespace ICSharpCode.Reports.Expressions.ReportingLanguage
} }
string EvaluateExpression(string expression)
{
IExpression compiled = compiler.CompileExpression<string>(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) private void FunctionStore (object sender,SimpleExpressionEvaluator.Evaluation.UnknownFunctionEventArgs e)
{ {

Loading…
Cancel
Save