diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/ExpressionVisitor.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/ExpressionVisitor.cs index 1afc6815d2..cc2a296a0a 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/ExpressionVisitor.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/ExpressionVisitor.cs @@ -4,9 +4,9 @@ using System; using System.Collections.ObjectModel; using ICSharpCode.Reporting.Expressions; using ICSharpCode.Reporting.Expressions.Irony; +using ICSharpCode.Reporting.Expressions.Irony.Ast; using ICSharpCode.Reporting.Items; using ICSharpCode.Reporting.PageBuilder.ExportColumns; -using ICSharpCode.Reporting.Expressions.Irony.Ast; namespace ICSharpCode.Reporting.Exporter.Visitors { @@ -61,7 +61,6 @@ namespace ICSharpCode.Reporting.Exporter.Visitors } catch (Exception e) { var s = String.Format("SharpReport.Exprssions -> {0} for {1}",e.Message,exportColumn.Text); Console.WriteLine(s); -// throw e; } } } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/ExpressionHelper.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/ExpressionHelper.cs index 252ec679d6..034e305af5 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/ExpressionHelper.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/ExpressionHelper.cs @@ -28,6 +28,7 @@ namespace ICSharpCode.Reporting.Expressions return false; } + public static string ComposeAstNodeError (string branch,AstNode node) { return String.Format ("Missing {0} <{1}>",branch,node.AsString); } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/Ast/AstExtensions.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/Ast/AstExtensions.cs index 05b919cf37..8c716fed14 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/Ast/AstExtensions.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/Ast/AstExtensions.cs @@ -1,11 +1,10 @@ // Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) using System; -using ICSharpCode.Reporting.BaseClasses; +using Irony.Interpreter; using ICSharpCode.Reporting.Interfaces.Export; using ICSharpCode.Reporting.Items; using ICSharpCode.Reporting.PageBuilder.ExportColumns; -using Irony.Interpreter; namespace ICSharpCode.Reporting.Expressions.Irony.Ast { diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/Ast/ParametersCallNode.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/Ast/ParametersCallNode.cs index cb9b2fda3c..67fe236998 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/Ast/ParametersCallNode.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/Ast/ParametersCallNode.cs @@ -31,7 +31,6 @@ namespace ICSharpCode.Reporting.Expressions.Irony.Ast var parametersCollection = thread.GetParametersCollection(); result = parametersCollection.Find(parameterNode.AsString); if (result == null) -// return String.Format("Missing Parameter <{0}>",parameterNode.AsString); return ExpressionHelper.ComposeAstNodeError("Parameters",parameterNode); return result.ParameterValue; } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs index 64d753b01c..80efae4007 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs @@ -14,6 +14,7 @@ using System.Linq; using ICSharpCode.Reporting.BaseClasses; using ICSharpCode.Reporting.Exporter; +using ICSharpCode.Reporting.Exporter.Visitors; using ICSharpCode.Reporting.Expressions; using ICSharpCode.Reporting.Globals; using ICSharpCode.Reporting.Interfaces; @@ -38,6 +39,7 @@ namespace ICSharpCode.Reporting.PageBuilder ReportModel = reportModel; Pages = new Collection(); Graphics = CreateGraphics.FromSize(reportModel.ReportSettings.PageSize); + ExpressionVisitor = new ExpressionVisitor(ReportModel.ReportSettings); } @@ -207,6 +209,7 @@ namespace ICSharpCode.Reporting.PageBuilder CurrentLocation = DetailStart; } + protected void UpdatePageInfo() { foreach (var page in Pages) { page.PageInfo.TotalPages = Pages.Count; @@ -233,10 +236,14 @@ namespace ICSharpCode.Reporting.PageBuilder protected ExportPage CurrentPage {get; set;} + protected Graphics Graphics {get;private set;} + internal Point DetailStart {get;private set;} internal Point DetailEnds {get; private set;} + internal ExpressionVisitor ExpressionVisitor {get; private set;} + internal Rectangle DetailsRectangle { get { var s = new Size(DetailEnds.X - DetailStart.X,DetailEnds.Y - DetailStart.Y); @@ -244,8 +251,8 @@ namespace ICSharpCode.Reporting.PageBuilder } } - protected Graphics Graphics {get;private set;} public Collection Pages {get; private set;} + } } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/ContainerConverter.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/ContainerConverter.cs index 8cc05f323d..b66844d67a 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/ContainerConverter.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/ContainerConverter.cs @@ -20,7 +20,7 @@ namespace ICSharpCode.Reporting.PageBuilder.Converter /// /// Description of SectionConverter. /// - internal class ContainerConverter : IContainerConverter + class ContainerConverter : IContainerConverter { public ContainerConverter(Graphics graphics, Point currentLocation) { diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs index 11bcf164be..a403303d51 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs @@ -13,7 +13,6 @@ using System.Drawing; using System.Linq; using ICSharpCode.Reporting.DataManager.Listhandling; -using ICSharpCode.Reporting.Expressions; using ICSharpCode.Reporting.Interfaces; using ICSharpCode.Reporting.Interfaces.Export; using ICSharpCode.Reporting.PageBuilder.Converter; @@ -26,6 +25,7 @@ namespace ICSharpCode.Reporting.PageBuilder /// public class DataPageBuilder:BasePageBuilder { + public DataPageBuilder(IReportModel reportModel, Type elementType,IEnumerable list):base(reportModel) { List = list; @@ -49,25 +49,29 @@ namespace ICSharpCode.Reporting.PageBuilder var converter = new ContainerConverter(base.Graphics, CurrentLocation); var position = DetailStart; - var collectionSource = new CollectionSource(List,ElementType,ReportModel.ReportSettings); - CurrentSection = ReportModel.DetailSection; + CurrentSection = ReportModel.DetailSection; + var collectionSource = new CollectionSource(List,ElementType,ReportModel.ReportSettings); if(collectionSource.Count > 0) { collectionSource.Bind(); CurrentLocation = DetailStart; do { - var row = CreateContainerForSection(position); - row.Parent = CurrentPage; + var row = CreateContainerForSection(CurrentPage,position); + collectionSource.Fill(CurrentSection.Items); var convertedItems = converter.CreateConvertedList(ReportModel.DetailSection.Items); + converter.SetParent(row,convertedItems); + MeasureAndArrangeContainer(row); if (PageFull(row)) { InsertRange(rows); MeasureAndArrangeContainer(row); rows.Clear(); + ExpressionVisitor.Visit(CurrentPage); + CurrentPage.PageInfo.PageNumber = Pages.Count + 1; Pages.Add(CurrentPage); MeasureAndArrangeContainer(row); @@ -81,6 +85,7 @@ namespace ICSharpCode.Reporting.PageBuilder } row.ExportedItems.AddRange(convertedItems); + ExpressionVisitor.Visit(row as ExportContainer); rows.Add(row); position = new Point(CurrentSection.Location.X,position.Y + row.DesiredSize.Height + 1); } @@ -297,10 +302,11 @@ namespace ICSharpCode.Reporting.PageBuilder } - IExportContainer CreateContainerForSection(Point location ) + ExportContainer CreateContainerForSection(ExportPage parent,Point location ) { var detail = (ExportContainer)CurrentSection.CreateExportColumn(); detail.Location = location; + detail.Parent = parent; return detail; }