Browse Source

Layouter for section is only called once

pull/14/head
peterforstmeier 15 years ago
parent
commit
91ef018b16
  1. 22
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseSection.cs
  2. 38
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs
  3. 3
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedTableConverter.cs

22
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseSection.cs

@ -19,7 +19,7 @@ namespace ICSharpCode.Reports.Core
public class BaseSection : BaseReportItem,ISimpleContainer public class BaseSection : BaseReportItem,ISimpleContainer
{ {
private bool pageBreakAfter; // private bool pageBreakAfter;
private ReportItemCollection items; private ReportItemCollection items;
public event EventHandler<SectionEventArgs> SectionPrinting; public event EventHandler<SectionEventArgs> SectionPrinting;
@ -120,13 +120,6 @@ namespace ICSharpCode.Reports.Core
public int SectionMargin {get;set;} public int SectionMargin {get;set;}
public override System.Drawing.Point Location
{
get { return base.Location; }
set { base.Location = value; }
}
public ReportItemCollection Items public ReportItemCollection Items
{ {
get { get {
@ -138,17 +131,8 @@ namespace ICSharpCode.Reports.Core
} }
public virtual bool PageBreakAfter public virtual bool PageBreakAfter {get;set;}
{
get {
return pageBreakAfter;
}
set {
pageBreakAfter = value;
}
}
#endregion #endregion
#region System.IDisposable interface implementation #region System.IDisposable interface implementation

38
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs

@ -16,9 +16,9 @@ namespace ICSharpCode.Reports.Core.Exporter
public class BasePager:IReportCreator public class BasePager:IReportCreator
{ {
private PagesCollection pages; private PagesCollection pages;
private Graphics graphics; // private Graphics graphics;
private readonly object pageLock = new object(); private readonly object pageLock = new object();
private ILayouter layouter; // private ILayouter layouter;
public event EventHandler<PageCreatedEventArgs> PageCreated; public event EventHandler<PageCreatedEventArgs> PageCreated;
public event EventHandler<SectionRenderEventArgs> SectionRendering; public event EventHandler<SectionRenderEventArgs> SectionRendering;
@ -38,8 +38,8 @@ namespace ICSharpCode.Reports.Core.Exporter
throw new ArgumentNullException ("layouter"); throw new ArgumentNullException ("layouter");
} }
this.ReportModel = reportModel; this.ReportModel = reportModel;
this.layouter = layouter; this.Layouter = layouter;
this.graphics = CreateGraphicObject.FromSize(this.ReportModel.ReportSettings.PageSize); this.Graphics = CreateGraphicObject.FromSize(this.ReportModel.ReportSettings.PageSize);
} }
#endregion #endregion
@ -98,6 +98,13 @@ namespace ICSharpCode.Reports.Core.Exporter
Point offset = new Point(section.Location.X,section.SectionOffset); Point offset = new Point(section.Location.X,section.SectionOffset);
// Call layouter only once per section
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);
}
foreach (BaseReportItem item in section.Items) { foreach (BaseReportItem item in section.Items) {
ISimpleContainer container = item as ISimpleContainer; ISimpleContainer container = item as ISimpleContainer;
@ -105,8 +112,8 @@ namespace ICSharpCode.Reports.Core.Exporter
if (container != null) { if (container != null) {
ExportContainer exportContainer = StandardPrinter.ConvertToContainer(container,offset); ExportContainer exportContainer = StandardPrinter.ConvertToContainer(container,offset);
StandardPrinter.AdjustBackColor (container); StandardPrinter.AdjustBackColor (container);
ExporterCollection clist = StandardPrinter.ConvertPlainCollection(container.Items,offset); ExporterCollection clist = StandardPrinter.ConvertPlainCollection(container.Items,offset);
@ -115,11 +122,11 @@ namespace ICSharpCode.Reports.Core.Exporter
} else { } else {
Rectangle desiredRectangle = layouter.Layout(this.graphics,section); // Rectangle desiredRectangle = layouter.Layout(this.graphics,section);
Rectangle sectionRectangle = new Rectangle(section.Location,section.Size); // Rectangle sectionRectangle = new Rectangle(section.Location,section.Size);
if (!sectionRectangle.Contains(desiredRectangle)) { // if (!sectionRectangle.Contains(desiredRectangle)) {
section.Size = new Size(section.Size.Width,desiredRectangle.Size.Height + GlobalValues.ControlMargins.Top + GlobalValues.ControlMargins.Bottom); // section.Size = new Size(section.Size.Width,desiredRectangle.Size.Height + GlobalValues.ControlMargins.Top + GlobalValues.ControlMargins.Bottom);
} // }
list = StandardPrinter.ConvertPlainCollection(section.Items,offset); list = StandardPrinter.ConvertPlainCollection(section.Items,offset);
} }
} }
@ -266,14 +273,9 @@ namespace ICSharpCode.Reports.Core.Exporter
#region Property's #region Property's
protected Graphics Graphics { protected Graphics Graphics {get; private set;}
get { return graphics; }
}
public ILayouter Layouter { public ILayouter Layouter {get; private set;}
get { return layouter; }
}
public IReportModel ReportModel {get;set;} public IReportModel ReportModel {get;set;}

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

@ -74,7 +74,7 @@ namespace ICSharpCode.Reports.Core.Exporter
if (PrintHelper.IsTextOnlyRow(simpleContainer) ) { if (PrintHelper.IsTextOnlyRow(simpleContainer) ) {
headerRow = simpleContainer; headerRow = simpleContainer;
base.PrepareContainerForConverting(section,headerRow);
base.CurrentPosition = BaseConvert(exporterCollection,headerRow,base.DefaultLeftPosition,base.CurrentPosition); base.CurrentPosition = BaseConvert(exporterCollection,headerRow,base.DefaultLeftPosition,base.CurrentPosition);
} }
@ -90,6 +90,7 @@ namespace ICSharpCode.Reports.Core.Exporter
base.Evaluator.SinglePage.IDataNavigator = childNavigator; base.Evaluator.SinglePage.IDataNavigator = childNavigator;
// Convert Grouping Header // Convert Grouping Header
base.CurrentPosition = ConvertGroupHeader(exporterCollection,section,base.CurrentPosition); base.CurrentPosition = ConvertGroupHeader(exporterCollection,section,base.CurrentPosition);
childNavigator.Reset(); childNavigator.Reset();

Loading…
Cancel
Save