From 809cd67033ba713bcd7ce3d6db0d382ff57d368d Mon Sep 17 00:00:00 2001 From: peterforstmeier Date: Thu, 25 Nov 2010 20:37:02 +0100 Subject: [PATCH] Print ReportFooter at correct Position --- .../Project/Exporter/BasePager.cs | 10 +----- .../Exporter/Converters/BaseConverter.cs | 7 ++-- .../Converters/GroupedRowConverter.cs | 4 +-- .../Converters/GroupedTableConverter.cs | 2 +- .../Project/Exporter/DataPageBuilder.cs | 34 ++++++++++++++++--- 5 files changed, 35 insertions(+), 22 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 4e1a8199ad..5d28570ad0 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 @@ -16,10 +16,8 @@ namespace ICSharpCode.Reports.Core.Exporter public class BasePager:IReportCreator { private PagesCollection pages; -// private Graphics graphics; private readonly object pageLock = new object(); -// private ILayouter layouter; - + public event EventHandler PageCreated; public event EventHandler SectionRendering; public event EventHandler GroupHeaderRendering; @@ -121,12 +119,6 @@ namespace ICSharpCode.Reports.Core.Exporter list.Add(exportContainer); } else { - -// Rectangle desiredRectangle = layouter.Layout(this.graphics,section); -// Rectangle sectionRectangle = new Rectangle(section.Location,section.Size); -// if (!sectionRectangle.Contains(desiredRectangle)) { -// section.Size = new Size(section.Size.Width,desiredRectangle.Size.Height + GlobalValues.ControlMargins.Top + GlobalValues.ControlMargins.Bottom); -// } list = StandardPrinter.ConvertPlainCollection(section.Items,offset); } } 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 a03c98c9cf..daee005697 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 @@ -149,7 +149,7 @@ namespace ICSharpCode.Reports.Core.Exporter { PrepareContainerForConverting(section,simpleContainer); FireRowRendering(simpleContainer,currentNavigator); - Point curPos = BaseConvert(mylist,simpleContainer,DefaultLeftPosition,CurrentPosition); + Point curPos = ConvertContainer(mylist,simpleContainer,DefaultLeftPosition,CurrentPosition); AfterConverting (mylist); return curPos; } @@ -263,18 +263,17 @@ namespace ICSharpCode.Reports.Core.Exporter var rowSize = simpleContainer.Size; FillRow(simpleContainer); PrepareContainerForConverting(section,simpleContainer); - Point curPos = BaseConvert(mylist,simpleContainer,DefaultLeftPosition,CurrentPosition); + Point curPos = ConvertContainer(mylist,simpleContainer,DefaultLeftPosition,CurrentPosition); AfterConverting (mylist); simpleContainer.Size = rowSize; return curPos; } - protected static Point BaseConvert(ExporterCollection myList,ISimpleContainer container,int leftPos,Point curPos) + public static Point ConvertContainer(ExporterCollection myList,ISimpleContainer container,int leftPos,Point curPos) { ExporterCollection ml = BaseConverter.ConvertItems (container, curPos); myList.AddRange(ml); -// return new Point (leftPos,curPos.Y + container.Size.Height + (3 *GlobalValues.GapBetweenContainer)); return new Point (leftPos,curPos.Y + container.Size.Height); } 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 7853c7bb3f..123cf2a52f 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 @@ -18,8 +18,6 @@ namespace ICSharpCode.Reports.Core.Exporter private BaseReportItem parent; - - public GroupedRowConverter(IDataNavigator dataNavigator, ExporterPage singlePage, ILayouter layouter):base(dataNavigator,singlePage,layouter) { @@ -44,7 +42,7 @@ namespace ICSharpCode.Reports.Core.Exporter if (PrintHelper.IsTextOnlyRow(simpleContainer)) { ExporterCollection myList = new ExporterCollection(); - BaseConvert (myList,simpleContainer,parent.Location.X, + ConvertContainer (myList,simpleContainer,parent.Location.X, new Point(base.SectionBounds.DetailStart.X,base.SectionBounds.DetailStart.Y)); return myList; 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 782798168e..bba023f0c3 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 @@ -75,7 +75,7 @@ namespace ICSharpCode.Reports.Core.Exporter if (PrintHelper.IsTextOnlyRow(simpleContainer) ) { headerRow = simpleContainer; base.PrepareContainerForConverting(section,headerRow); - base.CurrentPosition = BaseConvert(exporterCollection,headerRow,base.DefaultLeftPosition,base.CurrentPosition); + base.CurrentPosition = ConvertContainer(exporterCollection,headerRow,base.DefaultLeftPosition,base.CurrentPosition); } BaseGroupedRow row = table.Items[1] as BaseGroupedRow; 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 bbc5b24395..6968a8d093 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 @@ -13,6 +13,7 @@ namespace ICSharpCode.Reports.Core.Exporter { IDataManager dataManager; IDataNavigator dataNavigator; + Point positionAfterDetail; readonly object addLock = new object(); @@ -88,8 +89,32 @@ namespace ICSharpCode.Reports.Core.Exporter protected override void BuildReportFooter (Rectangle footerRectangle) { - base.ReportModel.ReportFooter.SectionOffset = footerRectangle.Top; - ExporterCollection convertedList = base.ConvertSection (base.ReportModel.ReportFooter,this.dataNavigator.CurrentRow); + bool pageBreak = false; + + base.ReportModel.ReportFooter.SectionOffset = footerRectangle.Top + GlobalValues.GapBetweenContainer; + + if (!PrintHelper.IsRoomForFooter(base.SectionBounds,base.ReportModel.ReportFooter.Location)) { + PageBreak(); + base.ReportModel.ReportFooter.SectionOffset = SectionBounds.DetailStart.Y; + pageBreak = true; + } + + ExporterCollection convertedList = new ExporterCollection(); + var section = base.ReportModel.DetailSection; + var table = section.Items[0] as BaseTableItem; + if (table != null) { + if (pageBreak) { + // Print the HeaderRow + var headerRow = table.Items[0]; + + + var curPos = BaseConverter.ConvertContainer(convertedList,(ISimpleContainer)headerRow,SectionBounds.PageHeaderRectangle.Left,SectionBounds.PageHeaderRectangle.Location); + base.SinglePage.Items.AddRange(convertedList); + base.ReportModel.ReportFooter.SectionOffset = curPos.Y + GlobalValues.GapBetweenContainer; + } + } + //allways print the reportFooter + convertedList = base.ConvertSection (base.ReportModel.ReportFooter,this.dataNavigator.CurrentRow); base.SinglePage.Items.AddRange(convertedList); } @@ -113,8 +138,7 @@ namespace ICSharpCode.Reports.Core.Exporter base.Layouter); if (baseConverter != null) { - - + baseConverter.SectionRendering += OnSectionRendering; baseConverter.GroupHeaderRendering += OnGroupHeaderRendering; baseConverter.GroupFooterRendering += OnGroupFooterRendering; @@ -162,6 +186,7 @@ namespace ICSharpCode.Reports.Core.Exporter } #endregion + private void WritePages () { this.dataNavigator = this.dataManager.GetNavigator; @@ -193,7 +218,6 @@ namespace ICSharpCode.Reports.Core.Exporter } - #region Public Methodes protected override void AddPage (ExporterPage page)