diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs index f58f4dff20..6b5a261047 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs @@ -101,9 +101,21 @@ namespace ICSharpCode.Reporting.PageBuilder } - protected bool PageFull(System.Collections.Generic.List columns) + + protected bool old_PageFull(System.Collections.Generic.List columns) { var rectToPrint = new Rectangle(columns[0].Location,columns[0].Size); + Console.WriteLine("{0} - {1}",CurrentLocation,rectToPrint.ToString()); + if (rectToPrint.Bottom > DetailEnds.Y) { + Console.WriteLine("----------PB---"); + return true; + } + return false; + } + + + protected bool PageFull(IExportContainer row) { + var rectToPrint = new Rectangle(row.Location,row.DesiredSize); if (rectToPrint.Bottom > DetailEnds.Y) { return true; } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/ContainerConverter.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/ContainerConverter.cs index 7d16fbc1c2..cdea2b228c 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/ContainerConverter.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/ContainerConverter.cs @@ -36,7 +36,6 @@ namespace ICSharpCode.Reporting.PageBuilder.Converter { var exportContainer = (ExportContainer)reportContainer.CreateExportColumn(); exportContainer.Location = CurrentLocation; -// exportContainer.DesiredSize = Measure(exportContainer); return exportContainer; } @@ -44,7 +43,7 @@ namespace ICSharpCode.Reporting.PageBuilder.Converter public List CreateConvertedList(IReportContainer reportContainer, IExportContainer exportContainer, Point position){ - +Console.WriteLine("CreateConvertedList {0}",reportContainer.Name); var itemsList = new List(); foreach (var item in reportContainer.Items) { var exportColumn = ExportColumnFactory.CreateItem(item); @@ -58,7 +57,7 @@ namespace ICSharpCode.Reporting.PageBuilder.Converter public List CreateConvertedList(IReportContainer reportContainer ,IExportContainer exportContainer){ -// Console.WriteLine("CreateConvertedList {0}",reportContainer.Name); + Console.WriteLine("CreateConvertedList {0}",reportContainer.Name); var itemsList = new List(); foreach (var element in reportContainer.Items) { var exportColumn = ExportColumnFactory.CreateItem(element); @@ -71,14 +70,6 @@ namespace ICSharpCode.Reporting.PageBuilder.Converter return itemsList; } - /* - public void ArrangeContainer(IExportContainer exportContainer) - { - Console.WriteLine("ArrangeContainer {0}",exportContainer.Name); - var exportArrange = exportContainer.GetArrangeStrategy(); - exportArrange.Arrange(exportContainer); - } - */ internal IReportContainer Container { get; private set; } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs index a58277040a..64bdbdd188 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs @@ -62,7 +62,7 @@ namespace ICSharpCode.Reporting.PageBuilder do { collectionSource.Fill(CurrentSection.Items); var convertedItems = converter.CreateConvertedList(ReportModel.DetailSection,detail,position); - if (PageFull(convertedItems)) { + if (old_PageFull(convertedItems)) { detail.ExportedItems.AddRange(convertedItems); CurrentPage.ExportedItems.Insert(2,detail); Pages.Add(CurrentPage); @@ -93,7 +93,7 @@ namespace ICSharpCode.Reporting.PageBuilder } - void BuildDetail() + void aa_1_BuildDetail() { CurrentSection = ReportModel.DetailSection; @@ -110,11 +110,34 @@ namespace ICSharpCode.Reporting.PageBuilder var row = CreateContainerIfNotExist(CurrentSection,detail, position); collectionSource.Fill(CurrentSection.Items); + //var convertedItems = converter.CreateConvertedList(ReportModel.DetailSection,row); var convertedItems = converter.CreateConvertedList(ReportModel.DetailSection,row,position); + MeasureAndArrangeContainer(converter,row); row.ExportedItems.AddRange(convertedItems); - if (PageFull(convertedItems)) { + /* + var rr = new Rectangle(row.Location,row.DesiredSize); + + if (rr.Bottom >DetailEnds.Y) { + Console.WriteLine("new pagebreak {0} - {1}",rr.ToString(),DetailEnds.Y); + InsertDetailAtPosition(detail); + Pages.Add(CurrentPage); + CurrentPage = CreateNewPage(); + WriteStandardSections(); + position = ResetPosition(); + detail = CreateDetail(DetailStart); + CurrentLocation = DetailStart; + + row = CreateContainerIfNotExist(CurrentSection,detail,position); +// var recreate = converter.CreateConvertedList(ReportModel.DetailSection,row,position); + var recreate = converter.CreateConvertedList(ReportModel.DetailSection,row); + MeasureAndArrangeContainer(converter,row); + row.ExportedItems.AddRange(recreate); + } + */ + + if (old_PageFull(convertedItems)) { InsertDetailAtPosition(detail); Pages.Add(CurrentPage); CurrentPage = CreateNewPage(); @@ -125,9 +148,11 @@ namespace ICSharpCode.Reporting.PageBuilder row = CreateContainerIfNotExist(CurrentSection,detail,position); var recreate = converter.CreateConvertedList(ReportModel.DetailSection,row,position); +// var recreate = converter.CreateConvertedList(ReportModel.DetailSection,row); MeasureAndArrangeContainer(converter,row); row.ExportedItems.AddRange(recreate); } + detail.ExportedItems.Add(row); position = new Point(CurrentSection.Location.Y,position.Y + CurrentSection.Size.Height); } @@ -144,6 +169,57 @@ namespace ICSharpCode.Reporting.PageBuilder } + void BuildDetail() + { + var converter = new ContainerConverter(base.Graphics, CurrentLocation); + var position = DetailStart; + CurrentSection = ReportModel.DetailSection; + var collectionSource = new CollectionSource(List,ElementType,ReportModel.ReportSettings); + IExportContainer detail = null; + if(collectionSource.Count > 0) { + collectionSource.Bind(); + + + detail = CreateDetail(DetailStart); + + do { + + var row = CreateContainerIfNotExist(CurrentSection,detail, position); + collectionSource.Fill(CurrentSection.Items); + + var convertedItems = converter.CreateConvertedList(ReportModel.DetailSection,row); + + MeasureAndArrangeContainer(converter,row); + row.ExportedItems.AddRange(convertedItems); + + if (PageFull(row)) { + InsertDetailAtPosition(detail); + Pages.Add(CurrentPage); + CurrentPage = CreateNewPage(); + WriteStandardSections(); + position = ResetPosition(); + detail = CreateDetail(DetailStart); + CurrentLocation = DetailStart; + + row = CreateContainerIfNotExist(CurrentSection,detail,position); + var recreate = converter.CreateConvertedList(ReportModel.DetailSection,row); + MeasureAndArrangeContainer(converter,row); + row.ExportedItems.AddRange(recreate); + } + + 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(); + } + } + IExportContainer CreateContainerIfNotExist(IReportContainer container, IExportContainer parent, Point position) { diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/Reportingfactory/PushModelFixture.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/Reportingfactory/PushModelFixture.cs index a4787799bb..c5fe16524f 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/Reportingfactory/PushModelFixture.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/Reportingfactory/PushModelFixture.cs @@ -8,7 +8,6 @@ */ using System; using System.Collections.Generic; -using System.IO; using System.Linq; using System.Reflection;