From 7dadb2c5625c7d96578879f1e174ecdd960ce835 Mon Sep 17 00:00:00 2001 From: peterforstmeier Date: Wed, 15 Sep 2010 20:24:58 +0200 Subject: [PATCH] Evaluation in grouped report --- .../Project/ReportExplorer/ExplorerTree.cs | 2 +- .../BaseClasses/Printing/StandardPrinter.cs | 21 ++-- .../Project/DataManager/ChildNavigator.cs | 46 +++++---- .../Project/DataManager/DataNavigator.cs | 24 ----- .../Converters/GroupedRowConverter.cs | 98 ++++--------------- .../Project/Interfaces/IDataNavigator.cs | 3 - .../DataManager/GroupTableFixture.cs | 30 ++++-- 7 files changed, 76 insertions(+), 148 deletions(-) diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportExplorer/ExplorerTree.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportExplorer/ExplorerTree.cs index 7f912f7fa5..85ecb332ea 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportExplorer/ExplorerTree.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportExplorer/ExplorerTree.cs @@ -37,7 +37,7 @@ namespace ICSharpCode.Reports.Addin private static int folderClosed = 0; private static int folderOpen = 1; - private static int clearIcon = 2; +// private static int clearIcon = 2; private static int ascendingIcon = 4; private static int descendingIcon = 5; 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 32c6df134b..99ac12ea3f 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 @@ -258,17 +258,20 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing public static void EvaluateRow(IExpressionEvaluatorFacade evaluator,ExporterCollection row) { // 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); -// textItem.Text = evaluator.Evaluate(textItem.Text); - textItem.Text = s; + try { + 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); + textItem.Text = evaluator.Evaluate(textItem.Text); +// textItem.Text = s; + } } + } catch (Exception e) { + throw e; } + } #endregion 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 7791fda1e8..384425648a 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 @@ -17,7 +17,7 @@ namespace ICSharpCode.Reports.Core public class ChildNavigator:IDataNavigator { private IndexList indexList; - private IDataViewStrategy dataStore; + private IDataViewStrategy store; private System.Collections.Generic.List.Enumerator ce; public ChildNavigator(IDataViewStrategy dataStore,IndexList indexList) @@ -25,7 +25,7 @@ namespace ICSharpCode.Reports.Core if (dataStore == null) { throw new ArgumentNullException("dataStore"); } - this.dataStore = dataStore; + this.store = dataStore; this.indexList = indexList; ce = this.indexList.GetEnumerator(); ce.MoveNext(); @@ -42,10 +42,10 @@ namespace ICSharpCode.Reports.Core get { IndexList ind = BuildChildList(); return ((ind != null) && (ind.Count > 0)); -// return false; } } + public int ChildListCount { get { throw new NotImplementedException(); @@ -58,45 +58,49 @@ namespace ICSharpCode.Reports.Core } } + public bool IsGrouped { get { throw new NotImplementedException(); } } - public int CurrentRow { - get { - throw new NotImplementedException(); - } + + public int CurrentRow + { + get {return this.indexList.CurrentPosition;} } + public int Count { get { return this.indexList.Count; } } + public object Current { get { - TableStrategy t = this.dataStore as TableStrategy; + TableStrategy t = this.store as TableStrategy; return t.myCurrent(ce.Current.ListIndex); -// return ci; } } + public AvailableFieldsCollection AvailableFields { get { throw new NotImplementedException(); } } + public void Fill(ReportItemCollection collection) { - TableStrategy tableStrategy = dataStore as TableStrategy; + TableStrategy tableStrategy = store as TableStrategy; foreach (var item in collection) { IDataItem dataItem = item as IDataItem; if (dataItem != null) { - CurrentItemsCollection currentItemsCollection = tableStrategy.FillDataRow(ce.Current.ListIndex); + CurrentItemsCollection currentItemsCollection = tableStrategy.FillDataRow(this.indexList[CurrentRow].ListIndex); CurrentItem s = currentItemsCollection.FirstOrDefault(x => x.ColumnName == dataItem.ColumnName); dataItem.DBValue = s.Value.ToString(); } @@ -106,37 +110,31 @@ namespace ICSharpCode.Reports.Core public bool MoveNext() { - return this.ce.MoveNext(); + this.indexList.CurrentPosition ++; + return this.indexList.CurrentPosition ExtraxtDataItems (ReportItemCollection items) - { - Collection inheritedReportItems = new Collection(items.OfType().ToList()); - return inheritedReportItems; - } - - */ - #region IDataNavigator implementation @@ -122,14 +113,6 @@ namespace ICSharpCode.Reports.Core } } - - public void SwitchGroup() - { - this.childList = BuildChildList(); - ce = childList.GetEnumerator(); - ce.MoveNext(); - } - public int ChildListCount @@ -139,13 +122,6 @@ namespace ICSharpCode.Reports.Core } } - - public bool ChildMoveNext() - { - return ce.MoveNext(); - } - - // at the moment only tables are working public void FillChild (ReportItemCollection collection) 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 60c80c23ef..fe54c5bdd8 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,8 @@ namespace ICSharpCode.Reports.Core.Exporter Rectangle pageBreakRect = Rectangle.Empty; + Console.WriteLine("datanav currentrow {0}",base.DataNavigator.CurrentRow); + do { PrintHelper.AdjustSectionLocation (section); @@ -78,86 +80,27 @@ namespace ICSharpCode.Reports.Core.Exporter // 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); - section.Size = this.SectionBounds.DetailSectionRectangle.Size; - base.SaveSize(section.Items[0].Size); - - - if (section.Items.IsGrouped) { + base.Evaluator.SinglePage.IDataNavigator = childNavigator; // Convert Grouping Header + currentPosition = ConvertGroupHeader(exporterCollection,section,simpleContainer,defaultLeftPos,currentPosition); - //Convert children + childNavigator.Reset(); + childNavigator.MoveNext(); - if (base.DataNavigator.HasChildren) { - + //Convert children + if (childNavigator != null) { StandardPrinter.AdjustBackColor(simpleContainer,GlobalValues.DefaultBackColor); - base.DataNavigator.SwitchGroup(); + do { - currentPosition = ConvertGroupChilds (exporterCollection,section,simpleContainer,defaultLeftPos,currentPosition); + 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 )) { @@ -165,7 +108,9 @@ namespace ICSharpCode.Reports.Core.Exporter currentPosition = CalculateStartPosition (); } } - while ( base.DataNavigator.ChildMoveNext()); + + while ( childNavigator.MoveNext()); + base.Evaluator.SinglePage.IDataNavigator = base.DataNavigator; } } else @@ -192,7 +137,7 @@ namespace ICSharpCode.Reports.Core.Exporter return exporterCollection; } - + private Point CalculateStartPosition() { return new Point(base.SectionBounds.PageHeaderRectangle.X,base.SectionBounds.PageHeaderRectangle.Y); @@ -209,7 +154,9 @@ namespace ICSharpCode.Reports.Core.Exporter base.DataNavigator.Fill(groupCollection); base.FireSectionRendering(section); ExporterCollection list = StandardPrinter.ConvertPlainCollection(groupCollection,offset); + StandardPrinter.EvaluateRow(base.Evaluator,list); + mylist.AddRange(list); AfterConverting (section,list); retVal = new Point (leftPos,offset.Y + groupCollection[0].Size.Height + 20 + (3 *GlobalValues.GapBetweenContainer)); @@ -218,7 +165,6 @@ namespace ICSharpCode.Reports.Core.Exporter } return retVal; } - private Point old_ConvertGroupHeader(ExporterCollection mylist,BaseSection section,ISimpleContainer simpleContainer,int leftPos,Point offset) @@ -227,7 +173,7 @@ namespace ICSharpCode.Reports.Core.Exporter base.DataNavigator.Fill(groupCollection); base.FireSectionRendering(section); ExporterCollection list = StandardPrinter.ConvertPlainCollection(groupCollection,offset); - StandardPrinter.EvaluateRow(base.Evaluator,list); +// StandardPrinter.EvaluateRow(base.Evaluator,list); mylist.AddRange(list); AfterConverting (section,list); @@ -237,7 +183,6 @@ namespace ICSharpCode.Reports.Core.Exporter private Point ConvertGroupChilds(ExporterCollection mylist, BaseSection section, ISimpleContainer simpleContainer, int defaultLeftPos, Point currentPosition) { - //base.DataNavigator.FillChild(simpleContainer.Items); PrepareContainerForConverting(section,simpleContainer); Point curPos = BaseConverter.BaseConvert(mylist,simpleContainer,defaultLeftPos,currentPosition); AfterConverting (section,mylist); @@ -249,9 +194,8 @@ namespace ICSharpCode.Reports.Core.Exporter { base.FillRow(simpleContainer); PrepareContainerForConverting(section,simpleContainer); -// base.FireSectionRendering(section); Point curPos = BaseConverter.BaseConvert(mylist,simpleContainer,defaultLeftPos,currentPosition); -// StandardPrinter.EvaluateRow(base.Evaluator,mylist); + StandardPrinter.EvaluateRow(base.Evaluator,mylist); AfterConverting (section,mylist); return curPos; } @@ -259,7 +203,7 @@ namespace ICSharpCode.Reports.Core.Exporter private void AfterConverting (BaseSection section,ExporterCollection mylist) { - StandardPrinter.EvaluateRow(base.Evaluator,mylist); +// StandardPrinter.EvaluateRow(base.Evaluator,mylist); section.Items[0].Size = base.RestoreSize; section.SectionOffset += section.Size.Height + 3 * GlobalValues.GapBetweenContainer; diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Interfaces/IDataNavigator.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Interfaces/IDataNavigator.cs index 0f70a4afe6..9029a7ec8d 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Interfaces/IDataNavigator.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Interfaces/IDataNavigator.cs @@ -32,9 +32,6 @@ using System.ComponentModel; bool HasChildren {get;} - void SwitchGroup(); - - bool ChildMoveNext(); int ChildListCount {get;} 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 8d26579341..5b0ed67650 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 @@ -16,6 +16,7 @@ using NUnit.Framework; namespace ICSharpCode.Reports.Core.Test.DataManager { + [TestFixture] public class GroupTableFixture { @@ -23,7 +24,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager DataTable table; [Test] - public void GroupingCollection_Empty_IsGrouped_False() + public void GroupingCollection_EmptyGrouping_IsGrouped_False() { IDataManager dm = ICSharpCode.Reports.Core.DataManager.CreateInstance(this.table,new ReportSettings()); DataNavigator dataNav = dm.GetNavigator; @@ -35,7 +36,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager #region Group by String [Test] - public void GroupingCollection_Contains_IsGrouped_True() + public void GroupingCollection_ContainsGrouping_IsGrouped_True() { var dataNav = PrepareStringGrouping(); Assert.That(dataNav.IsGrouped == true); @@ -112,18 +113,24 @@ namespace ICSharpCode.Reports.Core.Test.DataManager { 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); - } + if (dataNav.HasChildren) + { + var n = dataNav.GetChildNavigator(); + do + { + Assert.That(dataNav.HasChildren,Is.True); + DataRow r = dataNav.Current as DataRow; + string v2 = r["last"].ToString() + " GroupVal :" + r[3].ToString(); + Console.WriteLine(v2); + } + while (n.MoveNext()); + } } } + private void DateTimeChildList (IDataNavigator nav) { BaseDataItem first= new BaseDataItem("First"); @@ -135,7 +142,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager ric.Add(first); ric.Add(last); ric.Add(datetime); - + /* nav.SwitchGroup(); do { nav.FillChild(ric); @@ -144,6 +151,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager } } while ( nav.ChildMoveNext()); + */ } @@ -156,6 +164,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager ric.Add(first); ric.Add(last); + /* nav.SwitchGroup(); do { nav.FillChild(ric); @@ -164,6 +173,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager } } while ( nav.ChildMoveNext()); + */ } #endregion