Browse Source

PageBreakAfter in DetailSection

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.0@1474 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Peter Forstmeier 19 years ago
parent
commit
7f3d0afca9
  1. 2
      src/AddIns/Misc/SharpReport/SharpReport/SharpReportManager.cs
  2. 27
      src/AddIns/Misc/SharpReport/SharpReportCore/BaseItems/BaseReportObject.cs
  3. 32
      src/AddIns/Misc/SharpReport/SharpReportCore/BaseItems/BaseSection.cs
  4. 3
      src/AddIns/Misc/SharpReport/SharpReportCore/Events/ReportPageEventArgs.cs
  5. 33
      src/AddIns/Misc/SharpReport/SharpReportCore/Printing/AbstractDataRenderer.cs
  6. 80
      src/AddIns/Misc/SharpReport/SharpReportCore/Printing/AbstractRenderer.cs
  7. 191
      src/AddIns/Misc/SharpReport/SharpReportCore/Printing/RenderDataReport.cs
  8. 71
      src/AddIns/Misc/SharpReport/SharpReportCore/Printing/RenderFormSheetReport.cs
  9. 109
      src/AddIns/Misc/SharpReport/SharpReportCore/Printing/ReportDocument.cs

2
src/AddIns/Misc/SharpReport/SharpReport/SharpReportManager.cs

@ -100,7 +100,7 @@ namespace SharpReport{ @@ -100,7 +100,7 @@ namespace SharpReport{
} catch (Exception ) {
throw;
} finally {
System.Console.WriteLine("ReportManager:ReadColumnCollection in finally");
// System.Console.WriteLine("ReportManager:ReadColumnCollection in finally");
}
}
break;

27
src/AddIns/Misc/SharpReport/SharpReportCore/BaseItems/BaseReportObject.cs

@ -33,8 +33,8 @@ namespace SharpReportCore { @@ -33,8 +33,8 @@ namespace SharpReportCore {
private bool visible = true;
private bool canGrow ;
private bool canShrink ;
private bool pageBreakBefore;
private bool pageBreakAfter;
private bool suspend;
private Size size;
private Point location;
@ -44,7 +44,9 @@ namespace SharpReportCore { @@ -44,7 +44,9 @@ namespace SharpReportCore {
#region SharpReportCore.IPropertyChange interface implementation
public event PropertyChangedEventHandler PropertyChanged;
#endregion
public BaseReportObject() {
@ -68,6 +70,7 @@ namespace SharpReportCore { @@ -68,6 +70,7 @@ namespace SharpReportCore {
}
#region properties
public virtual bool Visible {
get {
return visible;
@ -109,26 +112,6 @@ namespace SharpReportCore { @@ -109,26 +112,6 @@ namespace SharpReportCore {
}
}
public virtual bool PageBreakAfter {
get {
return pageBreakAfter;
}
set {
pageBreakAfter = value;
NotifyPropertyChanged ("PageBreakAfter");
}
}
public virtual bool PageBreakBefore {
get {
return pageBreakBefore;
}
set {
pageBreakBefore = value;
NotifyPropertyChanged ("PageBreakBefore");
}
}

32
src/AddIns/Misc/SharpReport/SharpReportCore/BaseItems/BaseSection.cs

@ -21,6 +21,8 @@ namespace SharpReportCore { @@ -21,6 +21,8 @@ namespace SharpReportCore {
public class BaseSection : SharpReportCore.BaseReportObject {
private int sectionMargin;
// private bool pageBreakBefore;
private bool pageBreakAfter;
private ReportItemCollection items;
@ -46,8 +48,8 @@ namespace SharpReportCore { @@ -46,8 +48,8 @@ namespace SharpReportCore {
this.NotifyPrinted();
}
#region Events
#region properties
public void NotifyPrinting () {
if (this.SectionPrinting != null) {
SectionPrintingEventArgs ea = new SectionPrintingEventArgs (this);
@ -62,6 +64,11 @@ namespace SharpReportCore { @@ -62,6 +64,11 @@ namespace SharpReportCore {
}
}
#endregion
#region properties
public int SectionMargin {
get {
return this.sectionMargin;
@ -82,6 +89,29 @@ namespace SharpReportCore { @@ -82,6 +89,29 @@ namespace SharpReportCore {
return items;
}
}
/*
public virtual bool PageBreakBefore {
get {
return pageBreakBefore;
}
set {
pageBreakBefore = value;
NotifyPropertyChanged ("PageBreakBefore");
}
}
*/
public virtual bool PageBreakAfter {
get {
return pageBreakAfter;
}
set {
pageBreakAfter = value;
NotifyPropertyChanged ("PageBreakAfter");
}
}
#endregion
#region System.IDisposable interface implementation

3
src/AddIns/Misc/SharpReport/SharpReportCore/Events/ReportPageEventArgs.cs

@ -30,6 +30,7 @@ namespace SharpReportCore { @@ -30,6 +30,7 @@ namespace SharpReportCore {
PrintPageEventArgs printEventArgs;
int pageNumber;
bool forceNewPage;
PointF locationAfterDraw;
public ReportPageEventArgs(PrintPageEventArgs e,
@ -62,6 +63,8 @@ namespace SharpReportCore { @@ -62,6 +63,8 @@ namespace SharpReportCore {
forceNewPage = value;
}
}
public PointF LocationAfterDraw {
get {
return locationAfterDraw;

33
src/AddIns/Misc/SharpReport/SharpReportCore/Printing/AbstractDataRenderer.cs

@ -9,7 +9,7 @@ @@ -9,7 +9,7 @@
using System;
using System.Drawing;
using System.Drawing.Printing;
namespace SharpReportCore{
/// <summary>
/// Description of AbstractDataRenderer.
@ -26,21 +26,35 @@ namespace SharpReportCore{ @@ -26,21 +26,35 @@ namespace SharpReportCore{
this.dataManager = dataManager;
}
protected override void ReportBegin(object sender, ReportPageEventArgs e){
#region overrides
protected override void ReportBegin(object sender, PrintEventArgs e){
base.ReportBegin(sender, e);
}
protected override void BeginPrintPage(object sender, ReportPageEventArgs e)
{
base.BeginPrintPage(sender, e);
}
protected override int RenderSection(BaseSection section, ReportPageEventArgs rpea){
return 0;
}
#endregion
protected int DoItems (ReportPageEventArgs rpea) {
IContainerItem container = null;
bool hasContainer = false;
foreach (BaseReportItem item in this.CurrentSection.Items) {
container = item as IContainerItem;
if (container != null) {
hasContainer = true;
break;
}
}
if (hasContainer) {
return DoContainerControl(this.CurrentSection,container,rpea);
} else {
return base.RenderSection(this.CurrentSection, rpea);
}
}
protected int old_DoItems (BaseSection section, ReportPageEventArgs rpea) {
IContainerItem container = null;
bool hasContainer = false;
foreach (BaseReportItem item in section.Items) {
container = item as IContainerItem;
if (container != null) {
@ -53,7 +67,6 @@ namespace SharpReportCore{ @@ -53,7 +67,6 @@ namespace SharpReportCore{
} else {
return base.RenderSection(section, rpea);
}
}
private int DoContainerControl (BaseSection section,

80
src/AddIns/Misc/SharpReport/SharpReportCore/Printing/AbstractRenderer.cs

@ -3,20 +3,7 @@ @@ -3,20 +3,7 @@
//
// Copyright (C) 2005 Peter Forstmeier
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// Peter Forstmeier (Peter.Forstmeier@t-online.de)
@ -70,24 +57,47 @@ namespace SharpReportCore { @@ -70,24 +57,47 @@ namespace SharpReportCore {
void Init() {
reportDocument = new SharpReportCore.ReportDocument();
// Events from ReportDocument
reportDocument.QueryPageSettings += new QueryPageSettingsEventHandler (ReportQueryPage);
reportDocument.BeginPrint += new PrintEventHandler(ReportBegin);
reportDocument.EndPrint += new PrintEventHandler(ReportEnd);
reportDocument.QueryPage += new QueryPageSettingsEventHandler (ReportQueryPage);
reportDocument.ReportBegin += new EventHandler<ReportPageEventArgs> (ReportBegin);
reportDocument.PrintPageBegin += new EventHandler<ReportPageEventArgs>(BeginPrintPage);
// homemade events
reportDocument.PrintPageBodyStart += new EventHandler<ReportPageEventArgs> (PrintBodyStart);
reportDocument.PrintPageBodyEnd += new EventHandler<ReportPageEventArgs> (PrintBodyEnd);
reportDocument.PrintPageEnd += new EventHandler<ReportPageEventArgs> (PrintPageEnd);
reportDocument.DocumentName = reportSettings.ReportName;
//
reportDocument.RenderReportHeader += new EventHandler<ReportPageEventArgs> (BuildReportHeader);
reportDocument.RenderPageHeader += new EventHandler<ReportPageEventArgs> (BuildPageHeader);
}
#region test
protected virtual void BuildReportHeader (object sender, ReportPageEventArgs e) {
SectionInUse = Convert.ToInt16(GlobalEnums.enmSection.ReportPageHeader,
CultureInfo.InvariantCulture);
}
protected virtual void BuildPageHeader (object sender, ReportPageEventArgs e) {
SectionInUse = Convert.ToInt16(GlobalEnums.enmSection.ReportPageHeader,
CultureInfo.InvariantCulture);
}
protected void PageBreak(ReportPageEventArgs pea, BaseSection sec) {
#endregion
protected void PageBreak(ReportPageEventArgs pea) {
pea.PrintPageEventArgs.HasMorePages = true;
pea.ForceNewPage = true;
sec.PageBreakBefore = false;
}
protected bool CheckPageBreakAfter () {
if (this.CurrentSection.PageBreakAfter) {
return true;
}
return false;
}
protected int CalculateDrawAreaHeight(ReportPageEventArgs rpea){
if (rpea == null) {
throw new ArgumentNullException("rpea");
@ -112,10 +122,7 @@ namespace SharpReportCore { @@ -112,10 +122,7 @@ namespace SharpReportCore {
if (rpea == null) {
throw new ArgumentNullException("rpea");
}
// System.Console.WriteLine("Debug Rectangle {0}",rectangle);
rpea.PrintPageEventArgs.Graphics.DrawRectangle (Pens.Black,rectangle);
}
/// <summary>
@ -123,10 +130,11 @@ namespace SharpReportCore { @@ -123,10 +130,11 @@ namespace SharpReportCore {
/// </summary>
/// <returns></returns>
protected Rectangle DetailRectangle (ReportPageEventArgs e) {
sectionInUse = Convert.ToInt16(GlobalEnums.enmSection.ReportDetail,CultureInfo.InvariantCulture);
sectionInUse = Convert.ToInt16(GlobalEnums.enmSection.ReportDetail,
CultureInfo.InvariantCulture);
Rectangle rect = new Rectangle (e.PrintPageEventArgs.MarginBounds.Left,
CurrentSection.SectionOffset ,
this.detailStart.Y ,
e.PrintPageEventArgs.MarginBounds.Width,
detailEnds.Y - detailStart.Y - (3 * gap));
return rect;
@ -219,7 +227,6 @@ namespace SharpReportCore { @@ -219,7 +227,6 @@ namespace SharpReportCore {
protected void DrawSingleItem (ReportPageEventArgs rpea,BaseReportItem item){
item.SuspendLayout();
// System.Console.WriteLine("\tDrawSingleItem {0}",item.Name);
item.FormatOutput -= new EventHandler<FormatOutputEventArgs> (FormatBaseReportItem);
item.FormatOutput += new EventHandler<FormatOutputEventArgs> (FormatBaseReportItem);
item.Render(rpea);
@ -234,7 +241,6 @@ namespace SharpReportCore { @@ -234,7 +241,6 @@ namespace SharpReportCore {
if (!String.IsNullOrEmpty(baseDataItem.FormatString)) {
rpea.FormatedValue = defaultFormatter.FormatItem (baseDataItem);
// System.Console.WriteLine("\tFormated Value = {0}",rpea.FormatedValue);
} else {
rpea.FormatedValue = rpea.ValueToFormat;
}
@ -338,24 +344,24 @@ namespace SharpReportCore { @@ -338,24 +344,24 @@ namespace SharpReportCore {
}
protected virtual void ReportBegin (object sender,ReportPageEventArgs e) {
protected virtual void ReportBegin (object sender,PrintEventArgs e) {
// System.Console.WriteLine("\tAbstract - ReportBegin");
}
protected virtual void BeginPrintPage (object sender,ReportPageEventArgs e) {
SectionInUse = Convert.ToInt16(GlobalEnums.enmSection.ReportPageHeader,CultureInfo.InvariantCulture);
}
protected virtual void PrintBodyStart (object sender,ReportPageEventArgs e) {
this.SectionInUse = Convert.ToInt16(GlobalEnums.enmSection.ReportDetail,
// System.Console.WriteLine("\tAbstract - PrintBodyStart");
this.SectionInUse = Convert.ToInt16(GlobalEnums.enmSection.ReportDetail,
CultureInfo.InvariantCulture);
}
protected virtual void PrintBodyEnd (object sender,ReportPageEventArgs e) {
// System.Console.WriteLine("\tAbstarct - PrintBodyEnd");
}
protected virtual void PrintPageEnd (object sender,ReportPageEventArgs e) {
protected virtual void PrintPageEnd (object sender,ReportPageEventArgs e) {
// System.Console.WriteLine("\tAbstract - PrintPageEnd");
// BaseSection section = null;
// section = CurrentSection;
// section.SectionOffset = reportSettings.PageSettings.Bounds.Height - reportSettings.DefaultMargins.Top - reportSettings.DefaultMargins.Bottom;
@ -363,6 +369,10 @@ namespace SharpReportCore { @@ -363,6 +369,10 @@ namespace SharpReportCore {
// RenderSection (section,e);
}
protected virtual void ReportEnd (object sender,PrintEventArgs e) {
// System.Console.WriteLine("Abstract - ReportEnd");
}
#endregion

191
src/AddIns/Misc/SharpReport/SharpReportCore/Printing/RenderDataReport.cs

@ -27,17 +27,17 @@ using System.Drawing; @@ -27,17 +27,17 @@ using System.Drawing;
using System.ComponentModel;
using System.Globalization;
using System.Drawing.Printing;
using SharpReportCore;
/// <summary>
/// Renderer for DataReports
/// </summary>
/// <remarks>
/// created by - Forstmeier Peter
/// created on - 13.12.2004 11:07:59
/// </remarks>
///
/// <summary>
/// Renderer for DataReports
/// </summary>
/// <remarks>
/// created by - Forstmeier Peter
/// created on - 13.12.2004 11:07:59
/// </remarks>
///
namespace SharpReportCore {
public class RenderDataReport : AbstractDataRenderer {
@ -49,17 +49,19 @@ namespace SharpReportCore { @@ -49,17 +49,19 @@ namespace SharpReportCore {
public RenderDataReport(ReportModel model,DataManager dataManager):base (model,dataManager){
// base.DataManager.GroupChanged += new EventHandler<GroupChangedEventArgs>(OnGroupChanged);
// base.DataManager.GroupChanging += new EventHandler <EventArgs> (OnGroupChanging);
}
void OnGroupChanged (object sender,GroupChangedEventArgs e) {
System.Console.WriteLine("OnGroupChanged");
System.Console.WriteLine("OnGroupChanged");
}
void OnGroupChanging (object sender, EventArgs e) {
System.Console.WriteLine("OnGroupChanging");
System.Console.WriteLine("OnGroupChanging");
}
private void OnListChanged (object sender,System.ComponentModel.ListChangedEventArgs e) {
@ -93,40 +95,43 @@ namespace SharpReportCore { @@ -93,40 +95,43 @@ namespace SharpReportCore {
#region overrides
#region Draw the different report Sections
private PointF DoReportHeader (ReportPageEventArgs rpea){
System.Console.WriteLine("DoReportHeader");
PointF endAt = base.MeasureReportHeader (rpea);
this.AddSectionEvents();
base.RenderSection (base.CurrentSection,rpea);
base.DoItems(rpea);
this.RemoveSectionEvents();
if (base.CurrentSection.PageBreakAfter) {
base.PageBreak(rpea,base.CurrentSection);
base.CurrentSection.PageBreakAfter = false;
return new PointF();
}
// if (base.CheckPageBreakAfter()) {
// base.PageBreak(rpea);
// base.CurrentSection.PageBreakAfter = false;
// return new PointF();
// }
return endAt;
}
private PointF DoPageHeader (PointF startAt,ReportPageEventArgs rpea){
PointF endAt = base.MeasurePageHeader (startAt,rpea);
this.AddSectionEvents();
base.RenderSection (base.CurrentSection,rpea);
base.DoItems(rpea);
this.RemoveSectionEvents();
return endAt;
}
private void DoPageEnd (ReportPageEventArgs rpea){
// System.Console.WriteLine("\tDoPageEnd");
System.Console.WriteLine("DoPageEnd");
base.PrintPageEnd(this,rpea);
base.MeasurePageEnd (rpea);
this.AddSectionEvents();
base.RenderSection (base.CurrentSection,rpea);
base.DoItems(rpea);
this.RemoveSectionEvents();
}
@ -134,20 +139,39 @@ namespace SharpReportCore { @@ -134,20 +139,39 @@ namespace SharpReportCore {
//TODO how should we handle ReportFooter, print it on an seperate page ????
private void DoReportFooter (PointF startAt,ReportPageEventArgs rpea){
base.MeasureReportFooter(rpea);
this.AddSectionEvents();
base.RenderSection (base.CurrentSection,rpea);
base.DoItems(rpea);
this.RemoveSectionEvents();
}
#endregion
#region test
protected override void BuildReportHeader (object sender, ReportPageEventArgs e) {
base.BuildReportHeader (sender,e);
this.currentPoint = DoReportHeader (e);
}
protected override void BuildPageHeader (object sender, ReportPageEventArgs e) {
base.BuildPageHeader (sender,e);
this.currentPoint = DoPageHeader (this.currentPoint,e);
base.DetailStart = new Point ((int)currentPoint.X,(int)currentPoint.Y +1);
}
#endregion
#region overrides
protected override void ReportQueryPage(object sender, QueryPageSettingsEventArgs qpea) {
base.ReportQueryPage (sender,qpea);
}
protected override void ReportBegin(object sender, ReportPageEventArgs rpea) {
base.ReportBegin (sender,rpea);
protected override void ReportBegin(object sender, PrintEventArgs rpea) {
System.Console.WriteLine("ReportBegin (BeginPrint)");
base.ReportBegin (sender,rpea);
base.DataManager.ListChanged += new EventHandler<ListChangedEventArgs> (OnListChanged);
dataNavigator = base.DataManager.GetNavigator;
dataNavigator.ListChanged += new EventHandler<ListChangedEventArgs> (OnListChanged);
@ -155,98 +179,87 @@ namespace SharpReportCore { @@ -155,98 +179,87 @@ namespace SharpReportCore {
base.DataNavigator = dataNavigator;
}
protected override void BeginPrintPage(object sender, ReportPageEventArgs rpea) {
// System.Console.WriteLine("!!! BeginPrintpage");
if (rpea == null) {
throw new ArgumentNullException("rpea");
}
base.BeginPrintPage (sender,rpea);
if (rpea.PageNumber == 1) {
//Draw ReportHeader
this.currentPoint = DoReportHeader (rpea);
}
//Draw Pageheader
this.currentPoint = DoPageHeader (this.currentPoint,rpea);
base.DetailStart = new Point ((int)currentPoint.X,(int)currentPoint.Y);
}
protected override void PrintBodyStart(object sender, ReportPageEventArgs rpea) {
Rectangle sectionRect;
Rectangle detailRect;
base.PrintBodyStart (sender,rpea);
BaseSection section = base.CurrentSection;
section.SectionOffset = (int)this.currentPoint.Y + base.Gap;
bool firstOnPage = true;
detailRect = base.DetailRectangle (rpea);
base.PrintBodyStart (sender,rpea);
this.currentPoint = new PointF (base.CurrentSection.Location.X,
this.DetailStart.Y);
//this is only for the first record, zhe other details will be calculated
sectionRect = new Rectangle (rpea.PrintPageEventArgs.MarginBounds.Left,
section.SectionOffset,
rpea.PrintPageEventArgs.MarginBounds.Width,
section.Size.Height);
// DebugRectangle (e,detailRect);
base.CurrentSection.SectionOffset = (int)this.DetailStart.Y + base.Gap;
// base.DebugRectangle(rpea,base.DetailRectangle(rpea));
// no loop if there is no data
if (! this.dataNavigator.HasMoreData ) {
rpea.PrintPageEventArgs.HasMorePages = false;
return;
}
// first element
if (this.dataNavigator.MoveNext()){
do {
this.dataNavigator.Fill (base.CurrentSection.Items);
base.RenderSection (base.CurrentSection,rpea);
if (!firstOnPage) {
base.CurrentSection.SectionOffset = base.CurrentSection.SectionOffset + base.CurrentSection.Size.Height + 2 * base.Gap;
}
base.FitSectionToItems (base.CurrentSection,rpea);
sectionRect = new Rectangle (rpea.PrintPageEventArgs.MarginBounds.Left,
base.CurrentSection.SectionOffset,
rpea.PrintPageEventArgs.MarginBounds.Width,
base.CurrentSection.Size.Height);
if (!base.DetailRectangle(rpea).Contains(sectionRect)) {
base.PageBreak(rpea);
return;
}
int i = base.DoItems(rpea);
this.currentPoint = new PointF (base.CurrentSection.Location.X, i);
firstOnPage = false;
while (this.dataNavigator.MoveNext()) {
this.dataNavigator.Fill (base.CurrentSection.Items);
base.RenderSection (section,rpea);
section.SectionOffset = section.SectionOffset + section.Size.Height + 2 * base.Gap;
base.FitSectionToItems (base.CurrentSection,rpea);
sectionRect = new Rectangle (rpea.PrintPageEventArgs.MarginBounds.Left,
section.SectionOffset,
rpea.PrintPageEventArgs.MarginBounds.Width,
section.Size.Height);
if (!detailRect.Contains(sectionRect)) {
base.PageBreak(rpea,section);
return;
}
if (this.dataNavigator.CurrentRow < this.dataNavigator.Count -1) {
if (base.CurrentSection.PageBreakAfter) {
base.PageBreak(rpea);;
return;
}
}
}
while (this.dataNavigator.MoveNext());
}
DoReportFooter (new PointF(0,section.SectionOffset + section.Size.Height),
DoReportFooter (new PointF(0,base.CurrentSection.SectionOffset + base.CurrentSection.Size.Height),
rpea);
rpea.PrintPageEventArgs.HasMorePages = false;
//Did we have a pagebreak
if (base.CurrentSection.PageBreakAfter) {
base.PageBreak(rpea,section);
base.CurrentSection.PageBreakAfter = false;
return;
}
}
protected override void PrintBodyEnd(object sender, ReportPageEventArgs rpea) {
// System.Console.WriteLine("PrintBodyEnd");
// System.Console.WriteLine("PrintBodyEnd ????");
base.PrintBodyEnd (sender,rpea);
}
protected override void PrintPageEnd(object sender, ReportPageEventArgs rpea) {
System.Console.WriteLine("!! Page End");
System.Console.WriteLine("Page End");
this.DoPageEnd (rpea);
}
protected override void ReportEnd(object sender, PrintEventArgs e){
base.ReportEnd(sender, e);
}
#endregion
public override string ToString() {
base.ToString();
return "RenderDataReport";

71
src/AddIns/Misc/SharpReport/SharpReportCore/Printing/RenderFormSheetReport.cs

@ -77,8 +77,9 @@ namespace SharpReportCore { @@ -77,8 +77,9 @@ namespace SharpReportCore {
base.RenderSection (base.CurrentSection,rpea);
this.RemoveSectionEvents();
if (base.CurrentSection.PageBreakAfter) {
base.PageBreak(rpea,base.CurrentSection);
if (base.CheckPageBreakAfter()) {
// base.PageBreak(rpea,base.CurrentSection);
base.PageBreak(rpea);
base.CurrentSection.PageBreakAfter = false;
return new PointF();
}
@ -116,50 +117,38 @@ namespace SharpReportCore { @@ -116,50 +117,38 @@ namespace SharpReportCore {
#endregion
#region event's
protected override void ReportQueryPage (object sender,QueryPageSettingsEventArgs qpea) {
base.ReportQueryPage (sender,qpea);
}
#region test
protected override void ReportBegin (object sender,ReportPageEventArgs rpea) {
base.ReportBegin (sender,rpea);
protected override void BuildReportHeader (object sender, ReportPageEventArgs e) {
System.Console.WriteLine("!!!!");
System.Console.WriteLine("testReportStart");
base.BuildReportHeader (sender,e);
this.currentPoint = DoReportHeader (e);
System.Console.WriteLine("");
}
/// <summary>
/// ReportHeader and if PageHeader
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
///
protected override void BeginPrintPage (object sender,ReportPageEventArgs rpea) {
if (rpea == null) {
throw new ArgumentNullException("rpea");
}
base.BeginPrintPage (sender,rpea);
//Draw ReportHeader
if (rpea.PageNumber == 1) {
//Draw ReportHeader
this.currentPoint = DoReportHeader (rpea);
}
protected override void BuildPageHeader (object sender, ReportPageEventArgs e) {
if (base.CurrentSection.PageBreakAfter) {
base.PageBreak(rpea,base.CurrentSection);
base.CurrentSection.PageBreakAfter = false;
return;
}
//Draw Pageheader
this.currentPoint = DoPageHeader (this.currentPoint,rpea);
System.Console.WriteLine("!!!!");
System.Console.WriteLine("testPrintheader");
base.BuildPageHeader (sender,e);
this.currentPoint = DoPageHeader (this.currentPoint,e);
base.DetailStart = new Point ((int)currentPoint.X,(int)currentPoint.Y);
System.Console.WriteLine("");
}
#endregion
#region event's
// protected override void ReportQueryPage (object sender,QueryPageSettingsEventArgs qpea) {
// base.ReportQueryPage (sender,qpea);
// }
// protected override void ReportBegin (object sender,PrintEventArgs rpea) {
// base.ReportBegin (sender,rpea);
// }
/// <summary>
/// Detail Section
@ -191,12 +180,16 @@ namespace SharpReportCore { @@ -191,12 +180,16 @@ namespace SharpReportCore {
protected override void PrintBodyEnd (object sender,ReportPageEventArgs rpea) {
base.PrintBodyEnd (sender,rpea);
this.DoReportFooter (new PointF(0,base.CurrentSection.SectionOffset + base.CurrentSection.Size.Height),
rpea);
}
protected override void ReportEnd(object sender, PrintEventArgs e){
base.ReportEnd(sender, e);
}
#endregion

109
src/AddIns/Misc/SharpReport/SharpReportCore/Printing/ReportDocument.cs

@ -5,7 +5,7 @@ using System; @@ -5,7 +5,7 @@ using System;
using System.Drawing;
using System.Windows.Forms;
using System.Drawing.Printing;
using SharpReportCore;
/// <summary>
/// Derived from PrintDocument to have more control about printing
@ -14,42 +14,74 @@ using SharpReportCore; @@ -14,42 +14,74 @@ using SharpReportCore;
/// created by - Forstmeier Peter
/// created on - 21.11.2004 14:47:20
/// </remarks>
namespace SharpReportCore {
public class ReportDocument : PrintDocument {
public event QueryPageSettingsEventHandler QueryPage;
public event EventHandler<ReportPageEventArgs> ReportBegin;
public event EventHandler<ReportPageEventArgs> PrintPageBegin;
public event EventHandler<ReportPageEventArgs> PrintPageBodyStart;
public event EventHandler<ReportPageEventArgs> PrintPageBodyEnd;
public event EventHandler<ReportPageEventArgs> PrintPageEnd;
public event EventHandler<ReportPageEventArgs> ReportEnd;
int pageNr;
public event EventHandler<ReportPageEventArgs> RenderReportHeader;
public event EventHandler<ReportPageEventArgs> RenderPageHeader;
int pageNumber;
public ReportDocument():base() {
base.BeginPrint += new PrintEventHandler (ReportDocumentBeginPrint);
base.PrintPage += new PrintPageEventHandler (ReportDocumentPrintPage);
}
#region overriede's
protected override void OnQueryPageSettings(QueryPageSettingsEventArgs e){
base.OnQueryPageSettings(e);
}
protected override void OnBeginPrint(PrintEventArgs e){
base.OnBeginPrint(e);
pageNumber = 0;
}
protected override void OnPrintPage(PrintPageEventArgs e){
base.OnPrintPage(e);
pageNumber ++;
ReportPageEventArgs pea = new ReportPageEventArgs (e,pageNumber,false,new PointF (0,0));
GeneratePage (pea);
base.EndPrint += new PrintEventHandler (ReportDocumentEndPrint);
base.QueryPageSettings += new QueryPageSettingsEventHandler (ReportDocumentQueryPage);
if (pea.PrintPageEventArgs.HasMorePages == false) {
this.OnEndPrint (new PrintEventArgs());
}
}
void GeneratePage (SharpReportCore.ReportPageEventArgs page) {
if (PrintPageBegin != null) {
PrintPageBegin (this,page);
protected override void OnEndPrint(PrintEventArgs e){
base.OnEndPrint(e);
}
#endregion
private void GeneratePage (SharpReportCore.ReportPageEventArgs page) {
if (this.pageNumber == 1) {
if (this.RenderReportHeader != null) {
this.RenderReportHeader(this,page);
}
}
if (this.RenderPageHeader != null) {
this.RenderPageHeader (this,page);
}
/*
if (page.ForceNewPage == true) {
page.PrintPageEventArgs.HasMorePages = true;
return;
}
*/
// print PageFooter before DetailSection
//so it's much easyer to calculate size of DetailSection
if (PrintPageEnd != null) {
@ -65,52 +97,17 @@ namespace SharpReportCore { @@ -65,52 +97,17 @@ namespace SharpReportCore {
PrintPageBodyEnd (this,page);
}
}
#region events
//this events are also used by PrintPreviewControl
public void ReportDocumentBeginPrint (object sender,PrintEventArgs e) {
pageNr = 0;
}
#region Property's
public void ReportDocumentQueryPage (object sender, QueryPageSettingsEventArgs e) {
if (QueryPage != null) {
QueryPage (this,e);
public int PageNumber {
get {
return pageNumber;
}
}
public void ReportDocumentPrintPage (object sender, PrintPageEventArgs e) {
pageNr ++;
ReportPageEventArgs pea = new ReportPageEventArgs (e,pageNr,false,new PointF (0,0));
if (pageNr == 1) {
if (ReportBegin != null) {
ReportBegin (this,pea);
}
}
GeneratePage (pea);
if ((pea.ForceNewPage == true) && (pea.PrintPageEventArgs.HasMorePages == true)) {
pea.ForceNewPage = false;
return;
}
if (pea.PrintPageEventArgs.HasMorePages == false) {
if (ReportEnd != null) {
ReportEnd (this,pea);
}
}
}
public void ReportDocumentEndPrint (object sender,PrintEventArgs e) {
// System.Console.WriteLine("\tReportDocument EndPrint");
pageNr = 0;
if (ReportEnd != null) {
ReportEnd (this,null);
}
}
#endregion
}
}

Loading…
Cancel
Save