Browse Source

PageBreakAfterGroupChange in TableLayout

pull/2/head
peterforstmeier 16 years ago
parent
commit
f4f36e920c
  1. 27
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs
  2. 24
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs
  3. 35
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedTableConverter.cs

27
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs

@ -2,7 +2,10 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System; using System;
using System.Collections.ObjectModel;
using System.Drawing; using System.Drawing;
using System.Linq;
using ICSharpCode.Reports.Core.BaseClasses; using ICSharpCode.Reports.Core.BaseClasses;
using ICSharpCode.Reports.Core.BaseClasses.Printing; using ICSharpCode.Reports.Core.BaseClasses.Printing;
using ICSharpCode.Reports.Core.Events; using ICSharpCode.Reports.Core.Events;
@ -115,6 +118,29 @@ namespace ICSharpCode.Reports.Core.Exporter
return curPos; return curPos;
} }
protected bool PageBreakAfterGroupChange(ISimpleContainer container)
{
var groupedRows = BaseConverter.FindGroups(container);
if (groupedRows.Count > 0) {
var groupedRow = groupedRows[0];
return groupedRow.PageBreakOnGroupChange;
}
return false;
}
protected static Collection<BaseGroupedRow> FindGroups (ISimpleContainer container)
{
return new Collection<BaseGroupedRow>(container.Items.OfType<BaseGroupedRow>().ToList());
}
protected virtual Point ForcePageBreak(ExporterCollection exporterCollection, BaseSection section)
{
BuildNewPage(exporterCollection,section);
return Point.Empty;
}
#endregion #endregion
#region IBaseConverter #region IBaseConverter
@ -152,7 +178,6 @@ namespace ICSharpCode.Reports.Core.Exporter
#endregion #endregion
protected void SaveSize(Size size) protected void SaveSize(Size size)
{ {
this.saveSize = size; this.saveSize = size;

24
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs

@ -119,6 +119,7 @@ namespace ICSharpCode.Reports.Core.Exporter
} }
pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)section.Items[0],currentPosition); pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)section.Items[0],currentPosition);
if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds)) { if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds)) {
currentPosition= ForcePageBreak (exporterCollection,section); currentPosition= ForcePageBreak (exporterCollection,section);
} }
@ -135,23 +136,12 @@ namespace ICSharpCode.Reports.Core.Exporter
} }
private Point ForcePageBreak(ExporterCollection exporterCollection, BaseSection section) protected override Point ForcePageBreak(ExporterCollection exporterCollection, BaseSection section)
{ {
base.BuildNewPage(exporterCollection,section); base.ForcePageBreak(exporterCollection,section);
return CalculateStartPosition(); return CalculateStartPosition();
} }
private static bool PageBreakAfterGroupChange(BaseSection section)
{
var groupedRowCollection = new Collection<BaseGroupedRow>(section.Items.OfType<BaseGroupedRow>().ToList());
if (groupedRowCollection.Count > 0) {
var groupedRow = groupedRowCollection[0];
return groupedRow.PageBreakOnGroupChange;
}
return false;
}
private Point CalculateStartPosition() private Point CalculateStartPosition()
{ {
@ -163,8 +153,8 @@ namespace ICSharpCode.Reports.Core.Exporter
{ {
var retVal = Point.Empty; var retVal = Point.Empty;
ReportItemCollection groupCollection = null; ReportItemCollection groupCollection = null;
var groupedRow = new Collection<BaseGroupedRow>(section.Items.OfType<BaseGroupedRow>().ToList()); var groupedRows = BaseConverter.FindGroups(section);
if (groupedRow.Count == 0) { if (groupedRows.Count == 0) {
groupCollection = section.Items.ExtractGroupedColumns(); groupCollection = section.Items.ExtractGroupedColumns();
base.DataNavigator.Fill(groupCollection); base.DataNavigator.Fill(groupCollection);
base.FireSectionRendering(section); base.FireSectionRendering(section);
@ -176,7 +166,7 @@ namespace ICSharpCode.Reports.Core.Exporter
AfterConverting (list); AfterConverting (list);
retVal = new Point (leftPos,offset.Y + groupCollection[0].Size.Height + 20 + (3 *GlobalValues.GapBetweenContainer)); retVal = new Point (leftPos,offset.Y + groupCollection[0].Size.Height + 20 + (3 *GlobalValues.GapBetweenContainer));
} else { } else {
retVal = ConvertStandardRow(exportList,section,groupedRow[0],leftPos,offset); retVal = ConvertStandardRow(exportList,section,groupedRows[0],leftPos,offset);
} }
return retVal; return retVal;
} }

35
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedTableConverter.cs

@ -63,16 +63,14 @@ namespace ICSharpCode.Reports.Core.Exporter
var simpleContainer = table.Items[0] as ISimpleContainer; var simpleContainer = table.Items[0] as ISimpleContainer;
if (simpleContainer.Items.Count > 0) { if (simpleContainer.Items.Count > 0)
//---- {
// do {
simpleContainer.Location = new Point (simpleContainer.Location.X,simpleContainer.Location.Y); simpleContainer.Location = new Point (simpleContainer.Location.X,simpleContainer.Location.Y);
simpleContainer.Parent = (BaseReportItem)this.table; simpleContainer.Parent = (BaseReportItem)this.table;
base.SaveSize( new Size (simpleContainer.Size.Width,simpleContainer.Size.Height)); base.SaveSize( new Size (simpleContainer.Size.Width,simpleContainer.Size.Height));
if (PrintHelper.IsTextOnlyRow(simpleContainer) ) { if (PrintHelper.IsTextOnlyRow(simpleContainer) ) {
Console.WriteLine("Print HeaderRow");
headerRow = simpleContainer; headerRow = simpleContainer;
currentPosition = BaseConverter.BaseConvert(exporterCollection,headerRow,defaultLeftPos,currentPosition); currentPosition = BaseConverter.BaseConvert(exporterCollection,headerRow,defaultLeftPos,currentPosition);
} }
@ -84,7 +82,6 @@ namespace ICSharpCode.Reports.Core.Exporter
//grouped //grouped
do { do {
Console.WriteLine("Group detected");
// GetType child navigator // GetType child navigator
IDataNavigator childNavigator = base.DataNavigator.GetChildNavigator(); IDataNavigator childNavigator = base.DataNavigator.GetChildNavigator();
@ -108,10 +105,26 @@ namespace ICSharpCode.Reports.Core.Exporter
currentPosition = ConvertGroupChilds (exporterCollection, currentPosition = ConvertGroupChilds (exporterCollection,
section, section,
simpleContainer,defaultLeftPos,currentPosition); simpleContainer,defaultLeftPos,currentPosition);
pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)simpleContainer,currentPosition);
if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds))
{
currentPosition = base.ForcePageBreak(exporterCollection,section);
currentPosition = ConvertStandardRow (exporterCollection,section,headerRow,defaultLeftPos,currentPosition);
}
} }
while ( childNavigator.MoveNext()); while ( childNavigator.MoveNext());
if (PageBreakAfterGroupChange(table) )
{
if ( base.DataNavigator.HasMoreData)
{
currentPosition = base.ForcePageBreak(exporterCollection,section);
currentPosition = ConvertStandardRow (exporterCollection,section,headerRow,defaultLeftPos,currentPosition);
}
}
base.Evaluator.SinglePage.IDataNavigator = base.DataNavigator; base.Evaluator.SinglePage.IDataNavigator = base.DataNavigator;
} }
} }
@ -133,10 +146,7 @@ namespace ICSharpCode.Reports.Core.Exporter
if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds)) if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds))
{ {
Console.WriteLine("PageBreak - PageFull"); currentPosition = base.ForcePageBreak(exporterCollection,section);
base.BuildNewPage(exporterCollection,section);
currentPosition = base.SectionBounds.ReportHeaderRectangle.Location;
currentPosition = ConvertStandardRow (exporterCollection,section,headerRow,defaultLeftPos,currentPosition); currentPosition = ConvertStandardRow (exporterCollection,section,headerRow,defaultLeftPos,currentPosition);
} }
@ -157,8 +167,11 @@ namespace ICSharpCode.Reports.Core.Exporter
return exporterCollection; return exporterCollection;
} }
protected override Point ForcePageBreak(ExporterCollection exporterCollection, BaseSection section)
{
base.ForcePageBreak(exporterCollection, section);
return base.SectionBounds.ReportHeaderRectangle.Location;
}
//Copy from GroupedRow //Copy from GroupedRow
private Point ConvertGroupHeader(ExporterCollection exportList,BaseSection section,int leftPos,Point offset) private Point ConvertGroupHeader(ExporterCollection exportList,BaseSection section,int leftPos,Point offset)

Loading…
Cancel
Save