From fb08d668569c0a71e103d8052da9b5e09111f027 Mon Sep 17 00:00:00 2001 From: peterforstmeier Date: Tue, 19 Oct 2010 20:36:19 +0200 Subject: [PATCH] ReportFooter --- .../Project/Exporter/BasePager.cs | 4 -- .../Exporter/Converters/BaseConverter.cs | 9 +-- .../Converters/GroupedRowConverter.cs | 59 ++++++++++++------- .../Converters/GroupedTableConverter.cs | 35 ++++++----- .../Project/Exporter/DataPageBuilder.cs | 16 +++-- .../Project/Interfaces/IItemConverter.cs | 3 +- 6 files changed, 71 insertions(+), 55 deletions(-) diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs index b01242f60b..8d55b25d86 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs @@ -94,10 +94,6 @@ namespace ICSharpCode.Reports.Core.Exporter ExporterCollection list = new ExporterCollection(); -// if (section.DrawBorder == true) { -// section.Items.Insert(0,CreateDebugItem(section)); -// } - if (section.Items.Count > 0) { Point offset = new Point(section.Location.X,section.SectionOffset); 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 5724e21f70..ffa43e9767 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 @@ -112,12 +112,8 @@ namespace ICSharpCode.Reports.Core.Exporter protected Point ConvertGroupChilds(ExporterCollection mylist, BaseSection section, ISimpleContainer simpleContainer, int defaultLeftPos, Point currentPosition) { - Console.WriteLine("---start --ConvertStandardRow {0} - section {1}",simpleContainer.Size,section.Size); PrepareContainerForConverting(section,simpleContainer); Point curPos = BaseConverter.BaseConvert(mylist,simpleContainer,defaultLeftPos,currentPosition); - Console.WriteLine("---end --ConvertStandardRow detail {0} - section {1}",simpleContainer.Size,section.Size); -// Console.WriteLine(); -// Console.WriteLine(); AfterConverting (section,mylist); return curPos; } @@ -156,7 +152,9 @@ namespace ICSharpCode.Reports.Core.Exporter return new ExporterCollection();; } + public Point CurrentPosition {get;set;} + #endregion public Rectangle ParentRectangle { get { return parentRectangle; } } @@ -181,7 +179,7 @@ namespace ICSharpCode.Reports.Core.Exporter } public Graphics Graphics {get;set;} - #endregion + protected void SaveSectionSize(Size size) @@ -214,7 +212,6 @@ namespace ICSharpCode.Reports.Core.Exporter protected void AfterConverting (BaseSection section,ExporterCollection convertedList) { StandardPrinter.EvaluateRow(Evaluator,convertedList); - section.Items[0].Size = RestoreSize; } 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 15171c6dc3..3fc01122cd 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 @@ -23,6 +23,7 @@ namespace ICSharpCode.Reports.Core.Exporter { } + public override ExporterCollection Convert(BaseReportItem parent, BaseReportItem item) { if (parent == null) { @@ -54,7 +55,7 @@ namespace ICSharpCode.Reports.Core.Exporter private ExporterCollection ConvertDataRow (ISimpleContainer simpleContainer) { ExporterCollection exporterCollection = new ExporterCollection(); - Point currentPosition = new Point(base.SectionBounds.DetailStart.X,base.SectionBounds.DetailStart.Y); + base.CurrentPosition = new Point(base.SectionBounds.DetailStart.X,base.SectionBounds.DetailStart.Y); BaseSection section = parent as BaseSection; int defaultLeftPos = parent.Location.X; @@ -62,10 +63,19 @@ namespace ICSharpCode.Reports.Core.Exporter Size groupSize = Size.Empty; Size childSize = Size.Empty; + Console.WriteLine("-------------------START"); + + Console.WriteLine ("section {0}",section.Size); + + Console.WriteLine(); + + if (section.Items.IsGrouped) { groupSize = section.Items[0].Size; childSize = section.Items[1].Size; + Console.WriteLine ("group {0}",section.Items[0].Size); + Console.WriteLine ("detail {0}",section.Items[1].Size); } Rectangle pageBreakRect = Rectangle.Empty; @@ -83,7 +93,7 @@ namespace ICSharpCode.Reports.Core.Exporter base.Evaluator.SinglePage.IDataNavigator = childNavigator; - currentPosition = ConvertGroupHeader(exporterCollection,section,defaultLeftPos,currentPosition); + base.CurrentPosition = ConvertGroupHeader(exporterCollection,section,defaultLeftPos,base.CurrentPosition); section.Size = base.RestoreSize; section.Items[0].Size = groupSize; @@ -92,12 +102,12 @@ namespace ICSharpCode.Reports.Core.Exporter childNavigator.Reset(); childNavigator.MoveNext(); -// Console.WriteLine("-------------------after group"); -// -// Console.WriteLine ("section {0}",section.Size); -// Console.WriteLine ("group {0}",section.Items[0].Size); -// Console.WriteLine ("detail {0}",section.Items[1].Size); -// Console.WriteLine(); + Console.WriteLine("-------------------after group"); + + Console.WriteLine ("section {0}",section.Size); + Console.WriteLine ("group {0}",section.Items[0].Size); + Console.WriteLine ("detail {0}",section.Items[1].Size); + Console.WriteLine(); //Convert children if (childNavigator != null) { @@ -105,11 +115,10 @@ namespace ICSharpCode.Reports.Core.Exporter do { Console.WriteLine("-----------------childs"); - -// Console.WriteLine ("section {0}",section.Size); -// Console.WriteLine ("group {0}",section.Items[0].Size); -// Console.WriteLine ("detail {0}",section.Items[1].Size); -// Console.WriteLine(); + Console.WriteLine ("section {0}",section.Size); + Console.WriteLine ("group {0}",section.Items[0].Size); + Console.WriteLine ("detail {0}",section.Items[1].Size); + Console.WriteLine(); section.Size = base.RestoreSize; section.Items[0].Size = groupSize; section.Items[1].Size = childSize; @@ -117,12 +126,12 @@ namespace ICSharpCode.Reports.Core.Exporter childNavigator.Fill(simpleContainer.Items); - currentPosition = ConvertGroupChilds (exporterCollection,section, - simpleContainer,defaultLeftPos,currentPosition); - pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)section.Items[1],currentPosition); - section.Items[1].Size = base.RestoreSize; + base.CurrentPosition = ConvertGroupChilds (exporterCollection,section, + simpleContainer,defaultLeftPos,base.CurrentPosition); + pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)section.Items[1],base.CurrentPosition); +// section.Items[1].Size = base.RestoreSize; if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds )) { - currentPosition = ForcePageBreak (exporterCollection,section); + base.CurrentPosition = ForcePageBreak (exporterCollection,section); } } while ( childNavigator.MoveNext()); @@ -131,7 +140,7 @@ namespace ICSharpCode.Reports.Core.Exporter if ( base.DataNavigator.HasMoreData) { - currentPosition = ForcePageBreak (exporterCollection,section); + base.CurrentPosition = ForcePageBreak (exporterCollection,section); } } @@ -141,14 +150,19 @@ namespace ICSharpCode.Reports.Core.Exporter else { // No Grouping at all - currentPosition = ConvertStandardRow (exporterCollection,section,simpleContainer,defaultLeftPos,currentPosition); + Size dd = section.Items[0].Size; + Console.WriteLine("---------NoGrouping"); + Console.WriteLine ("section {0}",section.Size); + Console.WriteLine ("row {0}",dd); + base.CurrentPosition = ConvertStandardRow (exporterCollection,section,simpleContainer,defaultLeftPos,base.CurrentPosition); section.Size = base.RestoreSize; + section.Items[0].Size = dd; } - pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)section.Items[0],currentPosition); + pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)section.Items[0],base.CurrentPosition); if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds)) { - currentPosition= ForcePageBreak (exporterCollection,section); + base.CurrentPosition = ForcePageBreak (exporterCollection,section); } ShouldDrawBorder (section,exporterCollection); @@ -159,6 +173,7 @@ namespace ICSharpCode.Reports.Core.Exporter section.Location.Y + section.Size.Height, SectionBounds.ReportFooterRectangle.Width, SectionBounds.ReportFooterRectangle.Height); + return exporterCollection; } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedTableConverter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedTableConverter.cs index 4cfb48edcc..903c9795e6 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedTableConverter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedTableConverter.cs @@ -49,12 +49,11 @@ namespace ICSharpCode.Reports.Core.Exporter BaseSection section = table.Parent as BaseSection; - Point currentPosition = new Point(PrintHelper.DrawingAreaRelativeToParent(this.table.Parent,this.table).Location.X, + base.CurrentPosition = new Point(PrintHelper.DrawingAreaRelativeToParent(this.table.Parent,this.table).Location.X, base.SectionBounds.DetailStart.Y); + int defaultLeftPos = base.CurrentPosition.X; - int defaultLeftPos = currentPosition.X; - - Point dataAreaStart = new Point(table.Items[0].Location.X,table.Items[0].Location.Y + currentPosition.Y); + Point dataAreaStart = new Point(table.Items[0].Location.X,table.Items[0].Location.Y + base.CurrentPosition.Y); ISimpleContainer headerRow = null; Rectangle pageBreakRect = Rectangle.Empty; @@ -73,7 +72,7 @@ namespace ICSharpCode.Reports.Core.Exporter if (PrintHelper.IsTextOnlyRow(simpleContainer) ) { headerRow = simpleContainer; - currentPosition = BaseConverter.BaseConvert(exporterCollection,headerRow,defaultLeftPos,currentPosition); + base.CurrentPosition = BaseConverter.BaseConvert(exporterCollection,headerRow,defaultLeftPos,base.CurrentPosition); } BaseGroupedRow row = table.Items[1] as BaseGroupedRow; @@ -89,7 +88,7 @@ namespace ICSharpCode.Reports.Core.Exporter base.Evaluator.SinglePage.IDataNavigator = childNavigator; // Convert Grouping Header - currentPosition = ConvertGroupHeader(exporterCollection,section,defaultLeftPos,currentPosition); + base.CurrentPosition = ConvertGroupHeader(exporterCollection,section,defaultLeftPos,base.CurrentPosition); childNavigator.Reset(); childNavigator.MoveNext(); @@ -103,15 +102,15 @@ namespace ICSharpCode.Reports.Core.Exporter childNavigator.Fill(simpleContainer.Items); - currentPosition = ConvertGroupChilds (exporterCollection, + base.CurrentPosition = ConvertGroupChilds (exporterCollection, section, - simpleContainer,defaultLeftPos,currentPosition); - pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)simpleContainer,currentPosition); + simpleContainer,defaultLeftPos,base.CurrentPosition); + pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)simpleContainer,base.CurrentPosition); if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds)) { - currentPosition = base.ForcePageBreak(exporterCollection,section); - currentPosition = ConvertStandardRow (exporterCollection,section,headerRow,defaultLeftPos,currentPosition); + base.CurrentPosition = base.ForcePageBreak(exporterCollection,section); + base.CurrentPosition = ConvertStandardRow (exporterCollection,section,headerRow,defaultLeftPos,base.CurrentPosition); } } while ( childNavigator.MoveNext()); @@ -120,8 +119,8 @@ namespace ICSharpCode.Reports.Core.Exporter { if ( base.DataNavigator.HasMoreData) { - currentPosition = base.ForcePageBreak(exporterCollection,section); - currentPosition = ConvertStandardRow (exporterCollection,section,headerRow,defaultLeftPos,currentPosition); + base.CurrentPosition = base.ForcePageBreak(exporterCollection,section); + base.CurrentPosition = ConvertStandardRow (exporterCollection,section,headerRow,defaultLeftPos,base.CurrentPosition); } } @@ -143,15 +142,15 @@ namespace ICSharpCode.Reports.Core.Exporter PrintHelper.AdjustSectionLocation(section); - pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)simpleContainer,currentPosition); + pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)simpleContainer,base.CurrentPosition); if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds)) { - currentPosition = base.ForcePageBreak(exporterCollection,section); - currentPosition = ConvertStandardRow (exporterCollection,section,headerRow,defaultLeftPos,currentPosition); + base.CurrentPosition = base.ForcePageBreak(exporterCollection,section); + base.CurrentPosition = ConvertStandardRow (exporterCollection,section,headerRow,defaultLeftPos,base.CurrentPosition); } - currentPosition = ConvertStandardRow (exporterCollection,section,simpleContainer,defaultLeftPos,currentPosition); + base.CurrentPosition = ConvertStandardRow (exporterCollection,section,simpleContainer,defaultLeftPos,base.CurrentPosition); simpleContainer.Size = base.RestoreSize; } @@ -160,7 +159,7 @@ namespace ICSharpCode.Reports.Core.Exporter base.DataNavigator.Reset(); base.DataNavigator.MoveNext(); SectionBounds.ReportFooterRectangle = new Rectangle(SectionBounds.ReportFooterRectangle.Left, - currentPosition.Y, + base.CurrentPosition.Y, SectionBounds.ReportFooterRectangle.Width, SectionBounds.ReportFooterRectangle.Height); } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/DataPageBuilder.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/DataPageBuilder.cs index 4bbd62ce98..96fe2d46ca 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/DataPageBuilder.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/DataPageBuilder.cs @@ -103,8 +103,9 @@ namespace ICSharpCode.Reports.Core.Exporter base.SinglePage.Items.AddRange(convertedList); } - - protected void BuildDetail (BaseSection section,IDataNavigator dataNavigator) + + + protected Point BuildDetail (BaseSection section,IDataNavigator dataNavigator) { ExporterCollection convertedList = new ExporterCollection(); @@ -124,8 +125,10 @@ namespace ICSharpCode.Reports.Core.Exporter convertedList = baseConverter.Convert(section,item); base.SinglePage.Items.AddRange(convertedList); + return baseConverter.CurrentPosition; } } + return Point.Empty; } @@ -145,10 +148,15 @@ namespace ICSharpCode.Reports.Core.Exporter BaseSection section = base.ReportModel.DetailSection; section.SectionOffset = base.SinglePage.SectionBounds.DetailStart.Y; - this.BuildDetail (section,dataNavigator); + var p = this.BuildDetail (section,dataNavigator); + + var r = new Rectangle (SectionBounds.ReportFooterRectangle.Left,p.Y, + SectionBounds.ReportFooterRectangle.Size.Width, + SectionBounds.ReportFooterRectangle.Size.Height); + this.BuildReportFooter(r); - this.BuildReportFooter(SectionBounds.ReportFooterRectangle); this.BuildPageFooter(); + //this is the last Page this.AddPage(base.SinglePage); base.FinishRendering(this.dataNavigator); diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Interfaces/IItemConverter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Interfaces/IItemConverter.cs index be798add86..f0b83acd81 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Interfaces/IItemConverter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Interfaces/IItemConverter.cs @@ -34,6 +34,7 @@ namespace ICSharpCode.Reports.Core.Interfaces public interface IBaseConverter:IRenderer { - ExporterCollection Convert (BaseReportItem parent,BaseReportItem item); + ExporterCollection Convert (BaseReportItem parent,BaseReportItem item); + Point CurrentPosition {get;set;} } }