Browse Source

PageBreakAfterGroupChange in TableLayout

pull/2/head
peterforstmeier 15 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 @@ @@ -2,7 +2,10 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.ObjectModel;
using System.Drawing;
using System.Linq;
using ICSharpCode.Reports.Core.BaseClasses;
using ICSharpCode.Reports.Core.BaseClasses.Printing;
using ICSharpCode.Reports.Core.Events;
@ -115,6 +118,29 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -115,6 +118,29 @@ namespace ICSharpCode.Reports.Core.Exporter
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
#region IBaseConverter
@ -152,7 +178,6 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -152,7 +178,6 @@ namespace ICSharpCode.Reports.Core.Exporter
#endregion
protected void SaveSize(Size 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 @@ -119,6 +119,7 @@ namespace ICSharpCode.Reports.Core.Exporter
}
pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)section.Items[0],currentPosition);
if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds)) {
currentPosition= ForcePageBreak (exporterCollection,section);
}
@ -135,23 +136,12 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -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();
}
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()
{
@ -163,8 +153,8 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -163,8 +153,8 @@ namespace ICSharpCode.Reports.Core.Exporter
{
var retVal = Point.Empty;
ReportItemCollection groupCollection = null;
var groupedRow = new Collection<BaseGroupedRow>(section.Items.OfType<BaseGroupedRow>().ToList());
if (groupedRow.Count == 0) {
var groupedRows = BaseConverter.FindGroups(section);
if (groupedRows.Count == 0) {
groupCollection = section.Items.ExtractGroupedColumns();
base.DataNavigator.Fill(groupCollection);
base.FireSectionRendering(section);
@ -176,7 +166,7 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -176,7 +166,7 @@ namespace ICSharpCode.Reports.Core.Exporter
AfterConverting (list);
retVal = new Point (leftPos,offset.Y + groupCollection[0].Size.Height + 20 + (3 *GlobalValues.GapBetweenContainer));
} else {
retVal = ConvertStandardRow(exportList,section,groupedRow[0],leftPos,offset);
retVal = ConvertStandardRow(exportList,section,groupedRows[0],leftPos,offset);
}
return retVal;
}

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

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

Loading…
Cancel
Save