Browse Source

Details for Sorted and Grouped List's

reports
Peter Forstmeier 12 years ago
parent
commit
e20369eb53
  1. 21
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataManager/Listhandling/CollectionDataSource.cs
  2. 105
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs
  3. 4
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/PageFixture.cs

21
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataManager/Listhandling/CollectionDataSource.cs

@ -27,13 +27,11 @@ namespace ICSharpCode.Reporting.DataManager.Listhandling @@ -27,13 +27,11 @@ namespace ICSharpCode.Reporting.DataManager.Listhandling
public class CollectionDataSource:IDataSource
{
readonly DataCollection<object> baseList;
readonly ReportSettings reportSettings;
readonly Type elementType;
readonly PropertyDescriptorCollection listProperties;
// OrderGroup orderGroup;
public CollectionDataSource(IEnumerable list, ReportSettings reportSettings)
{
@ -81,13 +79,12 @@ namespace ICSharpCode.Reporting.DataManager.Listhandling @@ -81,13 +79,12 @@ namespace ICSharpCode.Reporting.DataManager.Listhandling
}
}
public IList <object> CurrentList {get;private set;}
public int Count {
get {
return baseList.Count;
}
get {return baseList.Count;}
}
@ -98,6 +95,7 @@ namespace ICSharpCode.Reporting.DataManager.Listhandling @@ -98,6 +95,7 @@ namespace ICSharpCode.Reporting.DataManager.Listhandling
public IGrouping<object, object> CurrentKey {get; private set; }
#region Sort
void Sort()
@ -167,7 +165,14 @@ namespace ICSharpCode.Reporting.DataManager.Listhandling @@ -167,7 +165,14 @@ namespace ICSharpCode.Reporting.DataManager.Listhandling
IEnumerator<IGrouping<object, object>> groupEnumerator;
IEnumerable<IGrouping<object, object>> groupedList;
public IEnumerable<IGrouping<object, object>> GroupedList {
get { return groupedList; }
}
IEnumerator<object> listEnumerator;
public void Fill(List<IPrintableObject> collection)
@ -219,11 +224,11 @@ namespace ICSharpCode.Reporting.DataManager.Listhandling @@ -219,11 +224,11 @@ namespace ICSharpCode.Reporting.DataManager.Listhandling
public bool MoveNext()
{
var canMove = listEnumerator.MoveNext();
if (OrderGroup == OrderGroup.Grouped) {
if (! canMove) {
var groupCanMove = groupEnumerator.MoveNext();
CurrentKey = groupEnumerator.Current;
CurrentKey = groupEnumerator.Current;
if (groupCanMove) {
listEnumerator = groupEnumerator.Current.GetEnumerator();
canMove = listEnumerator.MoveNext();

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

@ -42,61 +42,80 @@ namespace ICSharpCode.Reporting.PageBuilder @@ -42,61 +42,80 @@ namespace ICSharpCode.Reporting.PageBuilder
AddPage(CurrentPage);
UpdatePageInfo();
RunExpressions(ReportModel.ReportSettings,DataSource);
var formatVisitor = new FormatVisitor();
formatVisitor.Run(Pages);
}
void BuildDetail()
{
Console.WriteLine("DatapageBuilder");
var exportRows = new List<IExportContainer>();
var converter = new ContainerConverter(base.Graphics, CurrentLocation);
var position = DetailStart;
CurrentSection = ReportModel.DetailSection;
// Console.WriteLine("Report -grouping {0} ",DataSource.OrderGroup.ToString());
// Console.WriteLine ("groupkey {0}",DataSource.CurrentKey);
if(DataSourceContainsData()) {
CurrentLocation = DetailStart;
if (! IsGrouped()) {
Console.WriteLine("report is not grouped");
if (IsGrouped()) {
BuildGroupedDetails();
} else {
Console.WriteLine("report is grouped");
BuildSortedDetails();
}
do {
var row = CreateContainerForSection(CurrentPage,position);
DataSource.Fill(CurrentSection.Items);
var convertedItems = converter.CreateConvertedList(ReportModel.DetailSection.Items);
converter.SetParent(row,convertedItems);
if (PageFull(row)) {
InsertExportRows(exportRows);
exportRows.Clear();
PerformPageBreak();
position = DetailStart;
row.Location = position;
}
MeasureAndArrangeContainer(row);
}
}
row.ExportedItems.AddRange(convertedItems);
exportRows.Add(row);
position = new Point(CurrentSection.Location.X,position.Y + row.DesiredSize.Height + 1);
void BuildGroupedDetails () {
Console.WriteLine("report is grouped");
var exportRows = new List<IExportContainer>();
var converter = new ContainerConverter(base.Graphics, CurrentLocation);
var position = DetailStart;
foreach (IGrouping<object, object> element in DataSource.GroupedList) {
Console.WriteLine ("groupkey {0} - {1}",element.Key,element.Count());
foreach (var e in element) {
Console.WriteLine("\t{0}",e.ToString());
}
while (DataSource.MoveNext());
InsertExportRows(exportRows);
}
InsertExportRows(exportRows);
}
void BuildSortedDetails(){
var exportRows = new List<IExportContainer>();
var converter = new ContainerConverter(base.Graphics, CurrentLocation);
var position = DetailStart;
do {
var row = CreateContainerForSection(CurrentPage, position);
DataSource.Fill(CurrentSection.Items);
var convertedItems = converter.CreateConvertedList(ReportModel.DetailSection.Items);
converter.SetParent(row, convertedItems);
if (PageFull(row)) {
InsertExportRows(exportRows);
exportRows.Clear();
PerformPageBreak();
position = DetailStart;
row.Location = position;
}
MeasureAndArrangeContainer(row);
row.ExportedItems.AddRange(convertedItems);
exportRows.Add(row);
position = new Point(CurrentSection.Location.X, position.Y + row.DesiredSize.Height + 1);
} while (DataSource.MoveNext());
InsertExportRows(exportRows);
}
void PerformPageBreak()
{
void PerformPageBreak(){
CurrentPage.PageInfo.PageNumber = Pages.Count + 1;
Pages.Add(CurrentPage);
CurrentPage = CreateNewPage();
@ -106,15 +125,12 @@ namespace ICSharpCode.Reporting.PageBuilder @@ -106,15 +125,12 @@ namespace ICSharpCode.Reporting.PageBuilder
}
bool IsGrouped()
{
bool IsGrouped(){
return DataSource.OrderGroup == OrderGroup.Grouped;
}
void CreateDataSource()
{
void CreateDataSource(){
DataSource = new CollectionDataSource(List, ReportModel.ReportSettings);
if (DataSourceContainsData()) {
DataSource.Bind();
@ -136,15 +152,13 @@ namespace ICSharpCode.Reporting.PageBuilder @@ -136,15 +152,13 @@ namespace ICSharpCode.Reporting.PageBuilder
}
void MeasureAndArrangeContainer(IExportContainer container)
{
void MeasureAndArrangeContainer(IExportContainer container){
container.DesiredSize = MeasureElement(container);
ArrangeContainer(container);
}
ExportContainer CreateContainerForSection(ExportPage parent,Point location )
{
ExportContainer CreateContainerForSection(ExportPage parent,Point location ){
var detail = (ExportContainer)CurrentSection.CreateExportColumn();
detail.Location = location;
detail.Parent = parent;
@ -152,8 +166,7 @@ namespace ICSharpCode.Reporting.PageBuilder @@ -152,8 +166,7 @@ namespace ICSharpCode.Reporting.PageBuilder
}
void InsertExportRows(List<IExportContainer> list)
{
void InsertExportRows(List<IExportContainer> list){
if (Pages.Count == 0) {
CurrentPage.ExportedItems.InsertRange(2, list);
} else {

4
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/PageFixture.cs

@ -10,11 +10,9 @@ using System; @@ -10,11 +10,9 @@ using System;
using System.IO;
using System.Reflection;
using System.Drawing;
using ICSharpCode.Reporting.Exporter;
using ICSharpCode.Reporting.Globals;
using ICSharpCode.Reporting.Interfaces;
using ICSharpCode.Reporting.Interfaces.Export;
using ICSharpCode.Reporting.PageBuilder;
using NUnit.Framework;
namespace ICSharpCode.Reporting.Test.PageBuilder
@ -69,7 +67,7 @@ namespace ICSharpCode.Reporting.Test.PageBuilder @@ -69,7 +67,7 @@ namespace ICSharpCode.Reporting.Test.PageBuilder
[SetUp]
public void LoadFromStream()
{
System.Reflection.Assembly asm = Assembly.GetExecutingAssembly();
Assembly asm = Assembly.GetExecutingAssembly();
var stream = asm.GetManifestResourceStream(TestHelper.RepWithTwoItems);
var reportingFactory = new ReportingFactory();
reportCreator = reportingFactory.ReportCreator(stream);

Loading…
Cancel
Save