Browse Source

Cleanup DataPageBuilder.cs

reports
Peter Forstmeier 12 years ago
parent
commit
82eb2f6eb4
  1. 96
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs
  2. 237
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs

96
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs

@ -42,15 +42,9 @@ namespace ICSharpCode.Reporting.PageBuilder
ExpressionVisitor = new ExpressionVisitor(ReportModel.ReportSettings); ExpressionVisitor = new ExpressionVisitor(ReportModel.ReportSettings);
} }
#region create Report Sections
protected ExportPage InitNewPage(){ void BuildReportHeader()
var pi = CreatePageInfo();
return new ExportPage(pi,ReportModel.ReportSettings.PageSize);
}
#region create Sections
protected void BuildReportHeader()
{ {
if (Pages.Count == 0) { if (Pages.Count == 0) {
var header = CreateSection(ReportModel.ReportHeader,CurrentLocation); var header = CreateSection(ReportModel.ReportHeader,CurrentLocation);
@ -61,7 +55,7 @@ namespace ICSharpCode.Reporting.PageBuilder
} }
protected void BuildPageHeader() void BuildPageHeader()
{ {
var pageHeader = CreateSection(ReportModel.PageHeader,CurrentLocation); var pageHeader = CreateSection(ReportModel.PageHeader,CurrentLocation);
DetailStart = new Point(ReportModel.ReportSettings.LeftMargin,pageHeader.Location.Y + pageHeader.DesiredSize.Height +1); DetailStart = new Point(ReportModel.ReportSettings.LeftMargin,pageHeader.Location.Y + pageHeader.DesiredSize.Height +1);
@ -69,7 +63,7 @@ namespace ICSharpCode.Reporting.PageBuilder
} }
protected void BuildPageFooter() void BuildPageFooter()
{ {
CurrentLocation = new Point(ReportModel.ReportSettings.LeftMargin, CurrentLocation = new Point(ReportModel.ReportSettings.LeftMargin,
ReportModel.ReportSettings.PageSize.Height - ReportModel.ReportSettings.BottomMargin - ReportModel.PageFooter.Size.Height); ReportModel.ReportSettings.PageSize.Height - ReportModel.ReportSettings.BottomMargin - ReportModel.PageFooter.Size.Height);
@ -80,6 +74,13 @@ namespace ICSharpCode.Reporting.PageBuilder
} }
void AddSectionToPage(IExportContainer header)
{
header.Parent = CurrentPage;
CurrentPage.ExportedItems.Add(header);
}
protected void BuildReportFooter() protected void BuildReportFooter()
{ {
var lastSection = CurrentPage.ExportedItems.Last(); var lastSection = CurrentPage.ExportedItems.Last();
@ -90,15 +91,6 @@ namespace ICSharpCode.Reporting.PageBuilder
AddSectionToPage(reportFooter); AddSectionToPage(reportFooter);
} }
#endregion
protected virtual ExportPage CreateNewPage()
{
var page = InitNewPage();
CurrentLocation = new Point(ReportModel.ReportSettings.LeftMargin,ReportModel.ReportSettings.TopMargin);
return page;
}
protected void WriteStandardSections() { protected void WriteStandardSections() {
this.BuildReportHeader(); this.BuildReportHeader();
@ -106,29 +98,6 @@ namespace ICSharpCode.Reporting.PageBuilder
BuildPageFooter(); BuildPageFooter();
} }
protected bool PageFull(IExportColumn column)
{
var rectToPrint = new Rectangle(column.Location,column.Size);
var rr = new Rectangle(new Point(column.Location.X + DetailsRectangle.Location.X,column.Location.Y + DetailsRectangle.Location.Y),
column.Size);
if (!DetailsRectangle.Contains(rr)) {
return true;
}
return false;
}
protected bool old_PageFull(List<IExportColumn> columns)
{
var rectToPrint = new Rectangle(columns[0].Location,columns[0].Size);
var rr = new Rectangle(new Point(columns[0].Location.X + DetailsRectangle.Location.X,columns[0].Location.Y + DetailsRectangle.Location.Y),
columns[0].Size);
if (!DetailsRectangle.Contains(rr)) {
return true;
}
return false;
}
protected bool PageFull(IExportContainer row) { protected bool PageFull(IExportContainer row) {
if (row.DisplayRectangle.Bottom > DetailEnds.Y) { if (row.DisplayRectangle.Bottom > DetailEnds.Y) {
@ -137,16 +106,9 @@ namespace ICSharpCode.Reporting.PageBuilder
return false; return false;
} }
// protected bool row_PageFull(IExportContainer row) { #endregion
// var rectToPrint = new Rectangle(new Point(row.Location.X,row.Location.Y + DetailsRectangle.Location.Y),
// row.DesiredSize);
// if (!DetailsRectangle.Contains(rectToPrint)) {
// return true;
// }
// return false;
// }
protected IExportContainer CreateSection(IReportContainer container,Point location) protected IExportContainer CreateSection(IReportContainer container,Point location)
{ {
var containerConverter = new ContainerConverter(Graphics, location); var containerConverter = new ContainerConverter(Graphics, location);
@ -162,13 +124,7 @@ namespace ICSharpCode.Reporting.PageBuilder
return convertedContainer; return convertedContainer;
} }
#region Arrange and Measure
protected void AddSectionToPage(IExportContainer header)
{
header.Parent = CurrentPage;
CurrentPage.ExportedItems.Add(header);
}
protected Size MeasureElement (IExportColumn element) { protected Size MeasureElement (IExportColumn element) {
var measureStrategy = element.MeasurementStrategy(); var measureStrategy = element.MeasurementStrategy();
@ -182,6 +138,9 @@ namespace ICSharpCode.Reporting.PageBuilder
exportArrange.Arrange(exportContainer); exportArrange.Arrange(exportContainer);
} }
#endregion
#region Pagehandling
IPageInfo CreatePageInfo() IPageInfo CreatePageInfo()
{ {
@ -192,7 +151,19 @@ namespace ICSharpCode.Reporting.PageBuilder
return pi; return pi;
} }
ExportPage InitNewPage(){
var pi = CreatePageInfo();
return new ExportPage(pi,ReportModel.ReportSettings.PageSize);
}
protected virtual ExportPage CreateNewPage()
{
var page = InitNewPage();
CurrentLocation = new Point(ReportModel.ReportSettings.LeftMargin,ReportModel.ReportSettings.TopMargin);
return page;
}
protected virtual void AddPage(ExportPage page) { protected virtual void AddPage(ExportPage page) {
if (Pages.Count == 0) { if (Pages.Count == 0) {
page.IsFirstPage = true; page.IsFirstPage = true;
@ -203,7 +174,7 @@ namespace ICSharpCode.Reporting.PageBuilder
public virtual void BuildExportList() public virtual void BuildExportList()
{ {
this.Pages.Clear(); Pages.Clear();
CurrentPage = CreateNewPage (); CurrentPage = CreateNewPage ();
WriteStandardSections(); WriteStandardSections();
CurrentLocation = DetailStart; CurrentLocation = DetailStart;
@ -216,6 +187,10 @@ namespace ICSharpCode.Reporting.PageBuilder
} }
} }
#endregion
#region Visitors
protected void RunExpressions(ReportSettings reportsettings) protected void RunExpressions(ReportSettings reportsettings)
{ {
var er = new ExpressionRunner(Pages,reportsettings); var er = new ExpressionRunner(Pages,reportsettings);
@ -229,6 +204,7 @@ namespace ICSharpCode.Reporting.PageBuilder
d.Run(); d.Run();
} }
#endregion
protected IReportModel ReportModel {get; private set;} protected IReportModel ReportModel {get; private set;}

237
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs

@ -35,6 +35,7 @@ namespace ICSharpCode.Reporting.PageBuilder
public override void BuildExportList() public override void BuildExportList()
{ {
CreateDataSource();
base.BuildExportList(); base.BuildExportList();
BuildDetail(); BuildDetail();
base.BuildReportFooter(); base.BuildReportFooter();
@ -43,23 +44,23 @@ namespace ICSharpCode.Reporting.PageBuilder
RunExpressions(ReportModel.ReportSettings); RunExpressions(ReportModel.ReportSettings);
} }
void BuildDetail() void BuildDetail()
{ {
var rows = new List<IExportContainer>(); var exportRows = new List<IExportContainer>();
var converter = new ContainerConverter(base.Graphics, CurrentLocation); var converter = new ContainerConverter(base.Graphics, CurrentLocation);
var position = DetailStart; var position = DetailStart;
CurrentSection = ReportModel.DetailSection; CurrentSection = ReportModel.DetailSection;
var collectionSource = new CollectionSource(List,ElementType,ReportModel.ReportSettings);
if(collectionSource.Count > 0) { if(DataSourceContainsData()) {
collectionSource.Bind();
CurrentLocation = DetailStart; CurrentLocation = DetailStart;
do { do {
var row = CreateContainerForSection(CurrentPage,position); var row = CreateContainerForSection(CurrentPage,position);
collectionSource.Fill(CurrentSection.Items); DataSource.Fill(CurrentSection.Items);
var convertedItems = converter.CreateConvertedList(ReportModel.DetailSection.Items); var convertedItems = converter.CreateConvertedList(ReportModel.DetailSection.Items);
converter.SetParent(row,convertedItems); converter.SetParent(row,convertedItems);
@ -67,13 +68,12 @@ namespace ICSharpCode.Reporting.PageBuilder
MeasureAndArrangeContainer(row); MeasureAndArrangeContainer(row);
if (PageFull(row)) { if (PageFull(row)) {
InsertRange(rows); InsertExportRows(exportRows);
MeasureAndArrangeContainer(row); MeasureAndArrangeContainer(row);
rows.Clear(); exportRows.Clear();
ExpressionVisitor.Visit(CurrentPage); ExpressionVisitor.Visit(CurrentPage);
CurrentPage.PageInfo.PageNumber = Pages.Count + 1; CurrentPage.PageInfo.PageNumber = Pages.Count + 1;
Pages.Add(CurrentPage); Pages.Add(CurrentPage);
MeasureAndArrangeContainer(row);
position = ResetPosition(); position = ResetPosition();
CurrentPage = CreateNewPage(); CurrentPage = CreateNewPage();
@ -86,210 +86,31 @@ namespace ICSharpCode.Reporting.PageBuilder
row.ExportedItems.AddRange(convertedItems); row.ExportedItems.AddRange(convertedItems);
ExpressionVisitor.Visit(row as ExportContainer); ExpressionVisitor.Visit(row as ExportContainer);
rows.Add(row); exportRows.Add(row);
position = new Point(CurrentSection.Location.X,position.Y + row.DesiredSize.Height + 1); position = new Point(CurrentSection.Location.X,position.Y + row.DesiredSize.Height + 1);
} }
while (collectionSource.MoveNext()); while (DataSource.MoveNext());
InsertRange(rows); InsertExportRows(exportRows);
} }
} }
/*
void BuildDetail_2()
{
var converter = new ContainerConverter(base.Graphics, CurrentLocation);
// var position = ResetPosition();
var position = DetailStart;
var collectionSource = new CollectionSource(List,ElementType,ReportModel.ReportSettings);
CurrentSection = ReportModel.DetailSection;
IExportContainer detail = null;
CurrentSection = ReportModel.DetailSection;
if(collectionSource.Count > 0) { void CreateDataSource()
collectionSource.Bind();
CurrentLocation = DetailStart;
// detail = CreateContainerForSection(DetailStart);
// detail.DesiredSize = new Size(detail.Size.Width,DetailEnds.Y - DetailStart.Y);
// detail.Parent = CurrentPage;
detail = CreateDetailSection(DetailStart);
detail.Parent = CurrentPage;
InsertDetailAtPosition(detail);
do {
// detail = CreateContainerForSection(position);
var row = CreateContainerForSection(position);
row.Parent = detail;
collectionSource.Fill(CurrentSection.Items);
var convertedItems = converter.CreateConvertedList(ReportModel.DetailSection.Items,position);
converter.SetParent(row,convertedItems);
if (PageFull(convertedItems)) {
// detail.ExportedItems.AddRange(convertedItems);
// CurrentPage.ExportedItems.Insert(2,detail);
row.ExportedItems.AddRange(convertedItems);
MeasureAndArrangeContainer(row);
detail.ExportedItems.Add(row);
Pages.Add(CurrentPage);
// MeasureAndArrangeContainer(detail);
position = ResetPosition();
CurrentPage = CreateNewPage();
WriteStandardSections();
CurrentLocation = DetailStart;
// detail = CreateContainerForSection(DetailStart);
} else {
// detail.ExportedItems.AddRange(convertedItems);
row.ExportedItems.AddRange(convertedItems);
MeasureAndArrangeContainer(row);
detail.ExportedItems.Add(row);
// InsertDetailAtPosition(detail);
// position = new Point(CurrentSection.Location.Y,position.Y + CurrentSection.Size.Height + 5);
position = new Point(CurrentSection.Location.X,position.Y + row.DesiredSize.Height + 5);
}
}
while (collectionSource.MoveNext());
InsertDetailAtPosition(detail);
} else {
detail = CreateContainerForSection(DetailStart);
InsertDetailAtPosition(detail);
}
}
*/
/*
void BuildDetail_1()
{ {
var converter = new ContainerConverter(base.Graphics, CurrentLocation); DataSource = new CollectionSource(List, ElementType, ReportModel.ReportSettings);
var position = ResetPosition(); if (DataSourceContainsData()) {
var collectionSource = new CollectionSource(List,ElementType,ReportModel.ReportSettings); DataSource.Bind();
CurrentSection = ReportModel.DetailSection;
IExportContainer detail = null;
CurrentSection = ReportModel.DetailSection;
if(collectionSource.Count > 0) {
collectionSource.Bind();
CurrentLocation = DetailStart;
detail = CreateContainerForSection(DetailStart);
// detail.DesiredSize = new Size(detail.Size.Width,DetailEnds.Y - DetailStart.Y);
detail.Parent = CurrentPage;
do {
collectionSource.Fill(CurrentSection.Items);
var convertedItems = converter.CreateConvertedList(ReportModel.DetailSection.Items,position);
converter.SetParent(detail,convertedItems);
if (PageFull(convertedItems)) {
detail.ExportedItems.AddRange(convertedItems);
CurrentPage.ExportedItems.Insert(2,detail);
Pages.Add(CurrentPage);
MeasureAndArrangeContainer(detail);
position = ResetPosition();
CurrentPage = CreateNewPage();
WriteStandardSections();
CurrentLocation = DetailStart;
detail = CreateContainerForSection(DetailStart);
} else {
detail.ExportedItems.AddRange(convertedItems);
MeasureAndArrangeContainer(detail);
// position = new Point(CurrentSection.Location.Y,position.Y + CurrentSection.Size.Height + 5);
position = new Point(CurrentSection.Location.X,position.Y + detail.DesiredSize.Height + 5);
}
}
while (collectionSource.MoveNext());
InsertDetailAtPosition(detail);
} else {
detail = CreateContainerForSection(DetailStart);
InsertDetailAtPosition(detail);
} }
} }
*/
/* bool DataSourceContainsData () {
void row_BuildDetail() if (DataSource.Count > 0) {
{ return true;
var converter = new ContainerConverter(base.Graphics, CurrentLocation);
var position = ResetPosition();
var collectionSource = new CollectionSource(List,ElementType,ReportModel.ReportSettings);
CurrentSection = ReportModel.DetailSection;
IExportContainer detail = null;
if(collectionSource.Count > 0) {
collectionSource.Bind();
detail = CreateDetail(DetailStart);
do {
collectionSource.Fill(CurrentSection.Items);
var row = CreateAndArrangeContainer(converter,position,detail);
Console.WriteLine("position {0}",position);
if (row_PageFull(row)) {
InsertDetailAtPosition(detail);
Pages.Add(CurrentPage);
CurrentPage = CreateNewPage();
WriteStandardSections();
position = ResetPosition();
detail = CreateDetail(DetailStart);
CurrentLocation = DetailStart;
row = CreateAndArrangeContainer(converter,position,detail);
}
detail.ExportedItems.Add(row);
position = new Point(CurrentSection.Location.Y,position.Y + CurrentSection.Size.Height);
}
while (collectionSource.MoveNext());
InsertDetailAtPosition(detail);
} else {
detail = CreateContainerForSection(DetailStart);
InsertDetailAtPosition(detail);
base.BuildReportFooter();
} }
return false;
} }
*/
/*
IExportContainer CreateContainerIfNotExist(IReportContainer container, IExportContainer parent, Point position)
{
var isContainer = container.Items[0] is IReportContainer;
if (!isContainer) {
var row = CreateContainerForSection(position);
row.Name = "Row";
row.Parent = parent;
row.Location = new Point(50, position.Y);
row.Size = new Size(400, container.Items[0].Size.Height + 4);
row.BackColor = Color.Green;
return row;
}
return CreateContainerForSection(container.Items[0].Location);
}
IExportContainer CreateDetailSection(Point startLocation)
{
var detail = CreateContainerForSection(startLocation);
detail.Parent = CurrentPage;
detail.DesiredSize = new Size(detail.Size.Width,DetailEnds.Y - DetailStart.Y);
return detail;
}
*/
Point ResetPosition () { Point ResetPosition () {
return new Point(DetailStart.X,1); return new Point(DetailStart.X,1);
} }
@ -311,7 +132,7 @@ namespace ICSharpCode.Reporting.PageBuilder
} }
void InsertRange(List<IExportContainer> list) void InsertExportRows(List<IExportContainer> list)
{ {
if (Pages.Count == 0) { if (Pages.Count == 0) {
CurrentPage.ExportedItems.InsertRange(2, list); CurrentPage.ExportedItems.InsertRange(2, list);
@ -321,20 +142,12 @@ namespace ICSharpCode.Reporting.PageBuilder
} }
void InsertDetailAtPosition(IExportContainer container) internal CollectionSource DataSource {get; private set;}
{
if (Pages.Count == 0) {
CurrentPage.ExportedItems.Insert(2, container);
} else {
CurrentPage.ExportedItems.Insert(1, container);
}
}
internal IReportContainer CurrentSection { get; private set; } internal IEnumerable List {get; private set;}
public IEnumerable List {get; private set;} protected IReportContainer CurrentSection { get; private set; }
public Type ElementType {get;private set;} protected Type ElementType {get;private set;}
} }
} }

Loading…
Cancel
Save