Browse Source

Expressions run on <List> works again

pull/15/head^2
Peter Forstmeier 15 years ago
parent
commit
7aeb62194b
  1. 4
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/CurrentItem.cs
  2. 17
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/CollectionStrategy.cs
  3. 4
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/TableStrategy.cs
  4. 5
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/ExpressionEvaluatorFacade.cs
  5. 6
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Compilation/Functions/AggregateFunctions/AggregateFunction.cs

4
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/CurrentItem.cs

@ -8,6 +8,10 @@ namespace ICSharpCode.Reports.Core
{ {
public class CurrentItem : AbstractColumn public class CurrentItem : AbstractColumn
{ {
public CurrentItem (string name,Type dataType):base(name,dataType)
{
}
public object Value{get;set;} public object Value{get;set;}
} }

17
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/CollectionStrategy.cs

@ -213,7 +213,8 @@ namespace ICSharpCode.Reports.Core {
private void FillInternal(object fillFrom,IDataItem item) private void FillInternal(object fillFrom,IDataItem item)
{ {
if (item is BaseDataItem)
if (item is BaseDataItem)
{ {
string result = String.Empty; string result = String.Empty;
PropertyPath path = fillFrom.ParsePropertyPath(item.ColumnName); PropertyPath path = fillFrom.ParsePropertyPath(item.ColumnName);
@ -331,15 +332,15 @@ namespace ICSharpCode.Reports.Core {
CurrentItem currentItem = null; CurrentItem currentItem = null;
foreach (PropertyDescriptor pd in this.listProperties) foreach (PropertyDescriptor pd in this.listProperties)
{ {
currentItem = new CurrentItem(); currentItem = new CurrentItem(pd.Name, pd.PropertyType);
currentItem.ColumnName = pd.Name;
currentItem.DataType = pd.PropertyType;
PropertyPath prop = obj.ParsePropertyPath(pd.Name); PropertyPath prop = obj.ParsePropertyPath(pd.Name);
if (prop != null) if (prop != null)
{ {
var pp = prop.Evaluate(obj); var pp = prop.Evaluate(obj);
currentItem.Value = pp.ToString(); if (pp != null)
{
currentItem.Value = pp.ToString();
}
} }
ci.Add(currentItem); ci.Add(currentItem);
} }
@ -385,9 +386,7 @@ namespace ICSharpCode.Reports.Core {
CurrentItem c = null; CurrentItem c = null;
foreach (PropertyDescriptor pd in this.listProperties) foreach (PropertyDescriptor pd in this.listProperties)
{ {
c = new CurrentItem(); c = new CurrentItem(pd.Name,pd.PropertyType);
c.ColumnName = pd.Name;
c.DataType = pd.PropertyType;
var s = pd.GetValue(this.Current); var s = pd.GetValue(this.Current);
if (s != null) if (s != null)
{ {

4
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/TableStrategy.cs

@ -125,9 +125,7 @@ namespace ICSharpCode.Reports.Core
if (row != null) { if (row != null) {
CurrentItem c = null; CurrentItem c = null;
foreach (DataColumn dc in table.Columns) { foreach (DataColumn dc in table.Columns) {
c = new CurrentItem(); c = new CurrentItem(dc.ColumnName,dc.DataType);
c.ColumnName = dc.ColumnName;
c.DataType = dc.DataType;
c.Value = row[dc.ColumnName]; c.Value = row[dc.ColumnName];
ci.Add(c); ci.Add(c);
} }

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

@ -25,7 +25,7 @@ namespace ICSharpCode.Reports.Expressions.ReportingLanguage
{ {
compiler = new ReportingLanguageCompiler(); compiler = new ReportingLanguageCompiler();
this.context = new ExpressionContext(null); this.context = new ExpressionContext(null);
context.ResolveUnknownVariable += VariableStore; context.ResolveUnknownVariable += VariableStore;
context.ResolveMissingFunction += FunctionStore; context.ResolveMissingFunction += FunctionStore;
SinglePage = pageInfo; SinglePage = pageInfo;
compiler.SinglePage = pageInfo; compiler.SinglePage = pageInfo;
@ -107,7 +107,7 @@ namespace ICSharpCode.Reports.Expressions.ReportingLanguage
string EvaluateExpression(string expression) string EvaluateExpression(string expression)
{ {
IExpression compiled = compiler.CompileExpression<string>(expression); IExpression compiled = compiler.CompileExpression<string>(expression);
if (compiled != null) { if (compiled != null) {
return (compiled.Evaluate(context)).ToString(); return (compiled.Evaluate(context)).ToString();
} }
@ -120,6 +120,7 @@ namespace ICSharpCode.Reports.Expressions.ReportingLanguage
Console.WriteLine(""); Console.WriteLine("");
Console.WriteLine("ExpressionEvaluatorFacade.Evaluate"); Console.WriteLine("ExpressionEvaluatorFacade.Evaluate");
Console.WriteLine(e.Message); Console.WriteLine(e.Message);
Console.WriteLine(e.TargetSite);
Console.WriteLine(""); Console.WriteLine("");
} }

6
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Compilation/Functions/AggregateFunctions/AggregateFunction.cs

@ -111,14 +111,14 @@ namespace SimpleExpressionEvaluator.Compilation.Functions.AggregateFunctions
{ {
navigator.Reset(); navigator.Reset();
List<object> list = new List<object>(); List<object> list = new List<object>();
while ( navigator.MoveNext()) { while ( navigator.MoveNext())
{
CurrentItemsCollection row = navigator.GetDataRow; CurrentItemsCollection row = navigator.GetDataRow;
CurrentItem currentItem = ExtractItemFromDataSet (row,data); CurrentItem currentItem = ExtractItemFromDataSet (row,data);
if (currentItem != null) { if (currentItem != null) {
object s1 = Convert.ToString(currentItem.Value.ToString(),CultureInfo.CurrentCulture); object s1 = Convert.ToString(currentItem.Value.ToString(),CultureInfo.CurrentCulture);
// Console.WriteLine("\tSetup DataSource value = {0}", s1.ToString());
if (IsNumeric(s1)) { if (IsNumeric(s1)) {
list.Add(Convert.ToDouble(s1,System.Globalization.CultureInfo.CurrentCulture)); list.Add(Convert.ToDouble(s1,System.Globalization.CultureInfo.CurrentCulture));
} else { } else {
@ -126,7 +126,7 @@ namespace SimpleExpressionEvaluator.Compilation.Functions.AggregateFunctions
} }
} }
else { else {
string str = String.Format ("<{0}> not found in AggregateFunction",data.ToString()); string str = String.Format ("<{0}> not found in AggregateFunction.SetupDataSource",data.ToString());
throw new FieldNotFoundException(str); throw new FieldNotFoundException(str);
} }
} }

Loading…
Cancel
Save