Browse Source

Expressions run on <List> works again

pull/15/head^2
Peter Forstmeier 15 years ago
parent
commit
7aeb62194b
  1. 6
      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. 7
      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

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

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

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

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

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

@ -25,7 +25,7 @@ namespace ICSharpCode.Reports.Expressions.ReportingLanguage @@ -25,7 +25,7 @@ namespace ICSharpCode.Reports.Expressions.ReportingLanguage
{
compiler = new ReportingLanguageCompiler();
this.context = new ExpressionContext(null);
context.ResolveUnknownVariable += VariableStore;
context.ResolveUnknownVariable += VariableStore;
context.ResolveMissingFunction += FunctionStore;
SinglePage = pageInfo;
compiler.SinglePage = pageInfo;
@ -37,7 +37,7 @@ namespace ICSharpCode.Reports.Expressions.ReportingLanguage @@ -37,7 +37,7 @@ namespace ICSharpCode.Reports.Expressions.ReportingLanguage
try {
string s = EvaluationHelper.ExtractExpressionPart(expression);
if (s.Length > 0) {
if (s.Length > 0) {
this.context.ContextObject = this.SinglePage ;
return EvaluateExpression (s);
}
@ -107,7 +107,7 @@ namespace ICSharpCode.Reports.Expressions.ReportingLanguage @@ -107,7 +107,7 @@ namespace ICSharpCode.Reports.Expressions.ReportingLanguage
string EvaluateExpression(string expression)
{
IExpression compiled = compiler.CompileExpression<string>(expression);
IExpression compiled = compiler.CompileExpression<string>(expression);
if (compiled != null) {
return (compiled.Evaluate(context)).ToString();
}
@ -120,6 +120,7 @@ namespace ICSharpCode.Reports.Expressions.ReportingLanguage @@ -120,6 +120,7 @@ namespace ICSharpCode.Reports.Expressions.ReportingLanguage
Console.WriteLine("");
Console.WriteLine("ExpressionEvaluatorFacade.Evaluate");
Console.WriteLine(e.Message);
Console.WriteLine(e.TargetSite);
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 @@ -111,14 +111,14 @@ namespace SimpleExpressionEvaluator.Compilation.Functions.AggregateFunctions
{
navigator.Reset();
List<object> list = new List<object>();
while ( navigator.MoveNext()) {
while ( navigator.MoveNext())
{
CurrentItemsCollection row = navigator.GetDataRow;
CurrentItem currentItem = ExtractItemFromDataSet (row,data);
if (currentItem != null) {
object s1 = Convert.ToString(currentItem.Value.ToString(),CultureInfo.CurrentCulture);
// Console.WriteLine("\tSetup DataSource value = {0}", s1.ToString());
if (IsNumeric(s1)) {
list.Add(Convert.ToDouble(s1,System.Globalization.CultureInfo.CurrentCulture));
} else {
@ -126,7 +126,7 @@ namespace SimpleExpressionEvaluator.Compilation.Functions.AggregateFunctions @@ -126,7 +126,7 @@ namespace SimpleExpressionEvaluator.Compilation.Functions.AggregateFunctions
}
}
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);
}
}

Loading…
Cancel
Save