From 979315eb2a7e9e12b4be476e7e785007ed27fbdf Mon Sep 17 00:00:00 2001 From: peterforstmeier Date: Sat, 11 Sep 2010 20:23:50 +0200 Subject: [PATCH] Change GroupedRowConverter.cs from DataNavigator.SwitchGroup to base.DataNavigator.GetChildNavigator() some small cleanup --- .../BaseClasses/Printing/PrintHelper.cs | 22 ------ .../BaseClasses/Printing/StandardPrinter.cs | 27 ++++++- .../Project/DataManager/ChildNavigator.cs | 24 ++++-- .../Project/DataManager/DataNavigator.cs | 9 ++- .../Exporter/Converters/BaseConverter.cs | 2 +- .../Converters/GroupedRowConverter.cs | 75 +++++++++++++++++-- .../Project/Printing/AbstractRenderer.cs | 12 +-- .../DataManager/GroupTableFixture.cs | 34 ++++++++- 8 files changed, 154 insertions(+), 51 deletions(-) diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/PrintHelper.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/PrintHelper.cs index 754c26c470..9d17cdd7b0 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/PrintHelper.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/PrintHelper.cs @@ -168,28 +168,6 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing #endregion - public static IExpressionEvaluatorFacade CreateEvaluator (ISinglePage singlePage,IDataNavigator dataNavigator) - { - if (singlePage == null) { - - throw new ArgumentNullException("singlePage"); - } - if (dataNavigator == null) { - throw new ArgumentNullException("dataNavigator"); - } - IExpressionEvaluatorFacade evaluatorFacade = new ExpressionEvaluatorFacade(); - evaluatorFacade.SinglePage = singlePage; - evaluatorFacade.SinglePage.IDataNavigator = dataNavigator; - return evaluatorFacade; - } - - - public static IExpressionEvaluatorFacade SetupEvaluator () - { - return new ExpressionEvaluatorFacade(); - } - - public static Point ConvertRectangleToCurentPosition (Rectangle r) { return new Point(r.Left,r.Bottom); diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/StandardPrinter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/StandardPrinter.cs index 9979e6b50d..32c6df134b 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/StandardPrinter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/StandardPrinter.cs @@ -232,16 +232,39 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing #region Evaluate + + public static IExpressionEvaluatorFacade SetupEvaluator () + { + return new ExpressionEvaluatorFacade(); + } + + + public static IExpressionEvaluatorFacade CreateEvaluator (ISinglePage singlePage,IDataNavigator dataNavigator) + { + if (singlePage == null) { + + throw new ArgumentNullException("singlePage"); + } + if (dataNavigator == null) { + throw new ArgumentNullException("dataNavigator"); + } + IExpressionEvaluatorFacade evaluatorFacade = new ExpressionEvaluatorFacade(); + evaluatorFacade.SinglePage = singlePage; + evaluatorFacade.SinglePage.IDataNavigator = dataNavigator; + return evaluatorFacade; + } + + public static void EvaluateRow(IExpressionEvaluatorFacade evaluator,ExporterCollection row) { - Console.WriteLine("evaluate row with row:{0} ",evaluator.SinglePage.IDataNavigator.CurrentRow); +// Console.WriteLine("evaluate row with row:{0} ",evaluator.SinglePage.IDataNavigator.CurrentRow); foreach (BaseExportColumn element in row) { ExportText textItem = element as ExportText; if (textItem != null) { string s = evaluator.Evaluate(textItem.Text); - Console.WriteLine("\teval {0} - {1} ",textItem.Text,s); +// Console.WriteLine("\teval {0} - {1} ",textItem.Text,s); // textItem.Text = evaluator.Evaluate(textItem.Text); textItem.Text = s; } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ChildNavigator.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ChildNavigator.cs index 1710f2c4cb..7791fda1e8 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ChildNavigator.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ChildNavigator.cs @@ -7,6 +7,7 @@ * To change this template use Tools | Options | Coding | Edit Standard Headers. */ using System; +using System.Linq; namespace ICSharpCode.Reports.Core { @@ -15,22 +16,22 @@ namespace ICSharpCode.Reports.Core /// public class ChildNavigator:IDataNavigator { - IndexList indexList; - IDataViewStrategy dataStore; - private System.Collections.Generic.List.Enumerator ce; + private IndexList indexList; + private IDataViewStrategy dataStore; + private System.Collections.Generic.List.Enumerator ce; public ChildNavigator(IDataViewStrategy dataStore,IndexList indexList) { - if (dataStore == null) { - + if (dataStore == null) { throw new ArgumentNullException("dataStore"); - } + } this.dataStore = dataStore; this.indexList = indexList; ce = this.indexList.GetEnumerator(); ce.MoveNext(); } + public bool HasMoreData { get { throw new NotImplementedException(); @@ -91,7 +92,16 @@ namespace ICSharpCode.Reports.Core public void Fill(ReportItemCollection collection) { - throw new NotImplementedException(); + TableStrategy tableStrategy = dataStore as TableStrategy; + foreach (var item in collection) { + IDataItem dataItem = item as IDataItem; + if (dataItem != null) { + CurrentItemsCollection currentItemsCollection = tableStrategy.FillDataRow(ce.Current.ListIndex); + CurrentItem s = currentItemsCollection.FirstOrDefault(x => x.ColumnName == dataItem.ColumnName); + dataItem.DBValue = s.Value.ToString(); + } + + } } public bool MoveNext() diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataNavigator.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataNavigator.cs index 3878f04d32..609ce094ae 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataNavigator.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataNavigator.cs @@ -17,7 +17,11 @@ namespace ICSharpCode.Reports.Core /// public class DataNavigator :IDataNavigator { + private IDataViewStrategy store; + private IndexList childList; + private System.Collections.Generic.List.Enumerator ce; + public DataNavigator(IDataViewStrategy store){ this.store = store; @@ -41,6 +45,8 @@ namespace ICSharpCode.Reports.Core } */ + + #region IDataNavigator implementation public void Fill (ReportItemCollection collection) { @@ -117,9 +123,6 @@ namespace ICSharpCode.Reports.Core } - IndexList childList; - private System.Collections.Generic.List.Enumerator ce; - public void SwitchGroup() { this.childList = BuildChildList(); diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs index 919a23873b..73693b86c8 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs @@ -53,7 +53,7 @@ namespace ICSharpCode.Reports.Core.Exporter this.dataNavigator = dataNavigator; this.sectionBounds = this.singlePage.SectionBounds; this.layouter = layouter; - this.evaluator = PrintHelper.CreateEvaluator(this.singlePage,this.dataNavigator); + this.evaluator = StandardPrinter.CreateEvaluator(this.singlePage,this.dataNavigator); } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs index bb14db5746..60c80c23ef 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs @@ -70,6 +70,73 @@ namespace ICSharpCode.Reports.Core.Exporter Rectangle pageBreakRect = Rectangle.Empty; + do { + + PrintHelper.AdjustSectionLocation (section); + section.Size = this.SectionBounds.DetailSectionRectangle.Size; + base.SaveSize(section.Items[0].Size); + + // did we have GroupedItems at all + if (section.Items.IsGrouped) { + // Convert Grouping Header + currentPosition = ConvertGroupHeader(exporterCollection,section,simpleContainer,defaultLeftPos,currentPosition); + + // GetType child navigator + IDataNavigator childNavigator = base.DataNavigator.GetChildNavigator(); + Console.WriteLine("child has {0} items",childNavigator.Count); + + //Convert children + if (childNavigator != null) { + StandardPrinter.AdjustBackColor(simpleContainer,GlobalValues.DefaultBackColor); + //base.DataNavigator.SwitchGroup(); + do { + childNavigator.Fill(simpleContainer.Items); + currentPosition = ConvertGroupChilds (exporterCollection,section,simpleContainer,defaultLeftPos,currentPosition); + pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)section.Items[1],currentPosition); + + if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds )) { + base.BuildNewPage(exporterCollection,section); + currentPosition = CalculateStartPosition (); + } + } + while ( childNavigator.MoveNext()); + } + } + else + { + // No Grouping at all + currentPosition = ConvertStandardRow (exporterCollection,section,simpleContainer,defaultLeftPos,currentPosition); + } + + pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)section.Items[0],currentPosition); + if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds)) { + base.BuildNewPage(exporterCollection,section); + currentPosition = CalculateStartPosition(); + } + + ShouldDrawBorder (section,exporterCollection); + + } + while (base.DataNavigator.MoveNext()); + + SectionBounds.ReportFooterRectangle = new Rectangle(SectionBounds.ReportFooterRectangle.Left, + section.Location.Y + section.Size.Height, + SectionBounds.ReportFooterRectangle.Width, + SectionBounds.ReportFooterRectangle.Height); + return exporterCollection; + } + + + private ExporterCollection old_ConvertDataRow (ISimpleContainer simpleContainer) + { + ExporterCollection exporterCollection = new ExporterCollection(); + Point currentPosition = new Point(base.SectionBounds.DetailStart.X,base.SectionBounds.DetailStart.Y); + BaseSection section = parent as BaseSection; + + int defaultLeftPos = parent.Location.X; + + Rectangle pageBreakRect = Rectangle.Empty; + do { PrintHelper.AdjustSectionLocation (section); @@ -126,12 +193,6 @@ namespace ICSharpCode.Reports.Core.Exporter } -// private Point PerformPageBreak (ExporterCollection exporterCollection,BaseSection section) -// { -// BuildNewPage(exporterCollection,section); -// return CalculateStartPosition(); -// } -// private Point CalculateStartPosition() { return new Point(base.SectionBounds.PageHeaderRectangle.X,base.SectionBounds.PageHeaderRectangle.Y); @@ -176,7 +237,7 @@ namespace ICSharpCode.Reports.Core.Exporter private Point ConvertGroupChilds(ExporterCollection mylist, BaseSection section, ISimpleContainer simpleContainer, int defaultLeftPos, Point currentPosition) { - base.DataNavigator.FillChild(simpleContainer.Items); + //base.DataNavigator.FillChild(simpleContainer.Items); PrepareContainerForConverting(section,simpleContainer); Point curPos = BaseConverter.BaseConvert(mylist,simpleContainer,defaultLeftPos,currentPosition); AfterConverting (section,mylist); diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/AbstractRenderer.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/AbstractRenderer.cs index 03e53a0ed7..105e45ead9 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/AbstractRenderer.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/AbstractRenderer.cs @@ -89,7 +89,7 @@ namespace ICSharpCode.Reports.Core this.reportDocument.RenderPageEnd += new EventHandler (PrintPageFooter); this.reportDocument.RenderReportEnd += new EventHandler (PrintReportFooter); - this.Evaluator = PrintHelper.SetupEvaluator(); + this.Evaluator = StandardPrinter.SetupEvaluator(); } @@ -262,6 +262,7 @@ namespace ICSharpCode.Reports.Core internal virtual void ReportQueryPage (object sender,QueryPageSettingsEventArgs qpea) { + qpea.PageSettings.Margins = new Margins(reportSettings.LeftMargin,reportSettings.RightMargin,reportSettings.TopMargin,reportSettings.BottomMargin); bool firstPage; if (this.currentPageNumber == 0) { @@ -270,10 +271,11 @@ namespace ICSharpCode.Reports.Core firstPage = false; } this.currentPageNumber ++; - ISinglePage sp = new SinglePage(new SectionBounds (reportSettings,firstPage),0); - PrintHelper.InitPage(sp,this.reportSettings); - sp.PageNumber = this.currentPageNumber; - reportDocument.SinglePage = sp; + + ISinglePage singlePage = new SinglePage(new SectionBounds (reportSettings,firstPage),0); + PrintHelper.InitPage(singlePage,this.reportSettings); + singlePage.PageNumber = this.currentPageNumber; + reportDocument.SinglePage = singlePage; } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/GroupTableFixture.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/GroupTableFixture.cs index d532a28e1a..8d26579341 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/GroupTableFixture.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/GroupTableFixture.cs @@ -170,30 +170,56 @@ namespace ICSharpCode.Reports.Core.Test.DataManager #region Try make recursive with ChildNavigator + /* + public void Can_FillChild() + { + var dataNav = PrepareStringGrouping(); + while (dataNav.MoveNext()) { + if (dataNav.HasChildren) { + Assert.That(dataNav.HasChildren,Is.True); + DataRow r = dataNav.Current as DataRow; + string v2 = r["last"].ToString() + " GroupVal :" + r[3].ToString(); + Console.WriteLine(v2); + FillChildList(dataNav); + } + + } + } + */ [Test] public void Can_Get_ChildNavigator () { + Console.WriteLine("Start Recusive Version"); var dataNav = PrepareStringGrouping(); + while (dataNav.MoveNext()) { if (dataNav.HasChildren) { + DataRow r = dataNav.Current as DataRow; + + IDataNavigator child = dataNav.GetChildNavigator(); + string v2 = r["last"].ToString() + " GroupVal :" + r[3].ToString() ; + Console.WriteLine(v2); Assert.That (child,Is.Not.Null); + reccall(child); } } + Console.WriteLine("End Recusive Version"); } [Test] public void RecursiveCall_Childs () { - var dataNav = PrepareStringGrouping(); - dataNav.MoveNext(); - Console.WriteLine("--------------start rec ------------"); - reccall (dataNav); + var dataNav = PrepareStringGrouping(); + dataNav.MoveNext(); + Console.WriteLine("--------------start rec ------------"); + reccall (dataNav); Console.WriteLine("--------------end rec ------------"); } + private void reccall (IDataNavigator startNavigator) { do