|
|
|
@ -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"; |
|
|
|
|