Browse Source

Remove MoveNext from CollectionDataSource.cs, all data access is done by foreach

reports
Peter Forstmeier 12 years ago
parent
commit
bf9fa9dcc7
  1. 62
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataManager/Listhandling/CollectionDataSource.cs
  2. 7
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/Data/IDataSource.cs
  3. 50
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs
  4. 62
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/DataSource/DataSourceFixture.cs

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

@ -87,29 +87,26 @@ namespace ICSharpCode.Reporting.DataManager.Listhandling
get {return baseList.Count;} get {return baseList.Count;}
} }
public object Current {get; private set;} public object Current {get; private set;}
public OrderGroup OrderGroup {get; private set;} public OrderGroup OrderGroup {get; private set;}
public IEnumerable<object> SortedList {get; private set;}
public IGrouping<object, object> CurrentKey {get; private set; } public IEnumerable<IGrouping<object, object>> GroupedList {get;private set;}
#region Sort #region Sort
void Sort() void Sort()
{ {
if (reportSettings.SortColumnsCollection.Count > 0) { if (reportSettings.SortColumnsCollection.Count > 0) {
var sorted = SortInternal(); SortedList = SortInternal();
OrderGroup = OrderGroup.Sorted; OrderGroup = OrderGroup.Sorted;
listEnumerator = sorted.GetEnumerator();
} else { } else {
OrderGroup = OrderGroup.AsIs; OrderGroup = OrderGroup.AsIs;
listEnumerator = baseList.GetEnumerator(); SortedList = CurrentList;
} }
listEnumerator.MoveNext();
Current = listEnumerator.Current;
} }
@ -131,13 +128,7 @@ namespace ICSharpCode.Reporting.DataManager.Listhandling
void Group() void Group()
{ {
OrderGroup = OrderGroup.Grouped; OrderGroup = OrderGroup.Grouped;
groupedList = GroupInternal(); GroupedList = GroupInternal();
groupEnumerator = groupedList.GetEnumerator();
groupEnumerator.MoveNext();
CurrentKey = groupEnumerator.Current;
listEnumerator = groupEnumerator.Current.GetEnumerator();
listEnumerator.MoveNext();
Current = listEnumerator.Current;
} }
@ -164,20 +155,9 @@ namespace ICSharpCode.Reporting.DataManager.Listhandling
#region Fill #region Fill
IEnumerator<IGrouping<object, object>> groupEnumerator; public void Fill (List<IPrintableObject> collection, object toFill) {
Current = toFill;
foreach (var element in collection) {
IEnumerable<IGrouping<object, object>> groupedList;
public IEnumerable<IGrouping<object, object>> GroupedList {
get { return groupedList; }
}
IEnumerator<object> listEnumerator;
public void Fill(List<IPrintableObject> collection)
{
foreach (var element in collection) {
var container = element as ReportContainer; var container = element as ReportContainer;
if (container != null) { if (container != null) {
FillFromList(container.Items); FillFromList(container.Items);
@ -186,7 +166,7 @@ namespace ICSharpCode.Reporting.DataManager.Listhandling
} }
} }
} }
void FillFromList(List<IPrintableObject> collection) void FillFromList(List<IPrintableObject> collection)
{ {
foreach (IPrintableObject item in collection) { foreach (IPrintableObject item in collection) {
@ -220,28 +200,6 @@ namespace ICSharpCode.Reporting.DataManager.Listhandling
return p.PropertyType; return p.PropertyType;
} }
public bool MoveNext()
{
var canMove = listEnumerator.MoveNext();
if (OrderGroup == OrderGroup.Grouped) {
if (! canMove) {
var groupCanMove = groupEnumerator.MoveNext();
CurrentKey = groupEnumerator.Current;
if (groupCanMove) {
listEnumerator = groupEnumerator.Current.GetEnumerator();
canMove = listEnumerator.MoveNext();
}
}
Current = listEnumerator.Current;
return canMove;
}
Current = listEnumerator.Current;
return canMove;
}
#endregion #endregion

7
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/Data/IDataSource.cs

@ -23,16 +23,11 @@ namespace ICSharpCode.Reporting.Interfaces.Data
public interface IDataSource{ public interface IDataSource{
void Bind(); void Bind();
void Fill(List<IPrintableObject> collection,object current);
void Fill(List<IPrintableObject> collection);
Collection<AbstractColumn> AvailableFields {get;} Collection<AbstractColumn> AvailableFields {get;}
IList <object> CurrentList {get;} IList <object> CurrentList {get;}
int Count {get;} int Count {get;}
object Current {get;} object Current {get;}
OrderGroup OrderGroup {get;} OrderGroup OrderGroup {get;}
IGrouping<object, object> CurrentKey {get;}
} }
} }

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

@ -50,8 +50,6 @@ namespace ICSharpCode.Reporting.PageBuilder
void BuildDetail() void BuildDetail()
{ {
CurrentSection = ReportModel.DetailSection; CurrentSection = ReportModel.DetailSection;
// Console.WriteLine("Report -grouping {0} ",DataSource.OrderGroup.ToString());
// Console.WriteLine ("groupkey {0}",DataSource.CurrentKey);
if(DataSourceContainsData()) { if(DataSourceContainsData()) {
CurrentLocation = DetailStart; CurrentLocation = DetailStart;
if (IsGrouped()) { if (IsGrouped()) {
@ -69,20 +67,52 @@ namespace ICSharpCode.Reporting.PageBuilder
var converter = new ContainerConverter(base.Graphics, CurrentLocation); var converter = new ContainerConverter(base.Graphics, CurrentLocation);
var position = DetailStart; var position = DetailStart;
foreach (IGrouping<object, object> element in DataSource.GroupedList) { foreach (IGrouping<object, object> grouping in DataSource.GroupedList) {
Console.WriteLine ("groupkey {0} - {1}",element.Key,element.Count()); Console.WriteLine ("groupkey {0} - {1}",grouping.Key,grouping.Count());
foreach (var e in element) {
Console.WriteLine("\t{0}",e.ToString()); foreach (var current in grouping) {
Console.WriteLine("\t{0}",current.ToString());
} }
} }
InsertExportRows(exportRows); InsertExportRows(exportRows);
} }
void BuildSortedDetails(){ void BuildSortedDetails(){
var exportRows = new List<IExportContainer>();
var converter = new ContainerConverter(base.Graphics, CurrentLocation);
var position = DetailStart;
foreach (var element in DataSource.SortedList) {
var row = CreateContainerForSection(CurrentPage, position);
DataSource.Fill(CurrentSection.Items,element);
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);
}
InsertExportRows(exportRows);
}
/*
void old_BuildSortedDetails(){
var exportRows = new List<IExportContainer>(); var exportRows = new List<IExportContainer>();
var converter = new ContainerConverter(base.Graphics, CurrentLocation); var converter = new ContainerConverter(base.Graphics, CurrentLocation);
@ -113,7 +143,7 @@ namespace ICSharpCode.Reporting.PageBuilder
} while (DataSource.MoveNext()); } while (DataSource.MoveNext());
InsertExportRows(exportRows); InsertExportRows(exportRows);
} }
*/
void PerformPageBreak(){ void PerformPageBreak(){
CurrentPage.PageInfo.PageNumber = Pages.Count + 1; CurrentPage.PageInfo.PageNumber = Pages.Count + 1;

62
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/DataSource/DataSourceFixture.cs

@ -7,6 +7,7 @@ using ICSharpCode.Reporting.DataManager.Listhandling;
using ICSharpCode.Reporting.Interfaces; using ICSharpCode.Reporting.Interfaces;
using ICSharpCode.Reporting.Items; using ICSharpCode.Reporting.Items;
using NUnit.Framework; using NUnit.Framework;
using System.Linq;
namespace ICSharpCode.Reporting.Test.DataSource namespace ICSharpCode.Reporting.Test.DataSource
{ {
@ -52,7 +53,8 @@ namespace ICSharpCode.Reporting.Test.DataSource
}; };
var collectionSource = new CollectionDataSource (list,new ReportSettings()); var collectionSource = new CollectionDataSource (list,new ReportSettings());
collectionSource.Bind(); collectionSource.Bind();
collectionSource.Fill(ric); var result = collectionSource.SortedList.FirstOrDefault();
collectionSource.Fill(ric,result);
foreach (BaseDataItem element in ric) { foreach (BaseDataItem element in ric) {
Assert.That(element.DataType,Is.EqualTo("System.String")); Assert.That(element.DataType,Is.EqualTo("System.String"));
} }
@ -64,13 +66,10 @@ namespace ICSharpCode.Reporting.Test.DataSource
var ric = new System.Collections.Generic.List<IPrintableObject>(){ var ric = new System.Collections.Generic.List<IPrintableObject>(){
new BaseDataItem(){ new BaseDataItem(){
ColumnName = "Lastname" ColumnName = "Lastname"
}, },
new BaseDataItem(){ new BaseDataItem(){
ColumnName = "Firstname" ColumnName = "Firstname"
} }
}; };
var rs = new ReportSettings(); var rs = new ReportSettings();
@ -79,6 +78,16 @@ namespace ICSharpCode.Reporting.Test.DataSource
collectionSource.Bind(); collectionSource.Bind();
string compare = String.Empty; string compare = String.Empty;
int i = 0; int i = 0;
foreach (var element in collectionSource.SortedList) {
collectionSource.Fill(ric,element);
Console.WriteLine("first : <{0}> Last <{1}> ",((BaseDataItem)ric[0]).DBValue,((BaseDataItem)ric[1]).DBValue);
Assert.That(((BaseDataItem)ric[0]).DBValue,Is.GreaterThanOrEqualTo(compare));
compare = ((BaseDataItem)ric[0]).DBValue;
i++;
}
/*
do { do {
collectionSource.Fill(ric); collectionSource.Fill(ric);
Console.WriteLine("first : <{0}> Last <{1}> ",((BaseDataItem)ric[0]).DBValue, Console.WriteLine("first : <{0}> Last <{1}> ",((BaseDataItem)ric[0]).DBValue,
@ -89,6 +98,7 @@ namespace ICSharpCode.Reporting.Test.DataSource
i ++; i ++;
}while (collectionSource.MoveNext()); }while (collectionSource.MoveNext());
*/
Assert.That(i,Is.EqualTo(collectionSource.Count)); Assert.That(i,Is.EqualTo(collectionSource.Count));
} }
@ -96,13 +106,26 @@ namespace ICSharpCode.Reporting.Test.DataSource
[Test] [Test]
public void GroupbyOneColumnAndFill () { public void GroupbyOneColumnAndFill () {
var dataItemsCollection = CreateDataItems(); var dataItemsCollection = CreateDataItems();
var repiortsettings = new ReportSettings(); var reportsettings = new ReportSettings();
repiortsettings.GroupColumnsCollection.Add( new GroupColumn("GroupItem",1,ListSortDirection.Ascending)); reportsettings.GroupColumnsCollection.Add( new GroupColumn("GroupItem",1,ListSortDirection.Ascending));
repiortsettings.GroupColumnsCollection.Add( new GroupColumn("RandomInt",1,ListSortDirection.Ascending)); //repiortsettings.GroupColumnsCollection.Add( new GroupColumn("RandomInt",1,ListSortDirection.Ascending));
var collectionSource = new CollectionDataSource (list,repiortsettings); var collectionSource = new CollectionDataSource (list,reportsettings);
collectionSource.Bind(); collectionSource.Bind();
int i = 0; int i = 0;
foreach (var element in collectionSource.GroupedList) {
Console.WriteLine("Key {0} ",element.Key);
foreach (var l in element) {
collectionSource.Fill(dataItemsCollection,l);
Console.WriteLine("first : <{0}> Last <{1}> Group <{2}> Randomint <{3}>",((BaseDataItem)dataItemsCollection[0]).DBValue,
((BaseDataItem)dataItemsCollection[1]).DBValue,
((BaseDataItem)dataItemsCollection[2]).DBValue,
((BaseDataItem)dataItemsCollection[3]).DBValue);
i++;
}
}
/*
do { do {
collectionSource.Fill(dataItemsCollection); collectionSource.Fill(dataItemsCollection);
Console.WriteLine("first : <{0}> Last <{1}> Group <{2}> Randomint <{3}>",((BaseDataItem)dataItemsCollection[0]).DBValue, Console.WriteLine("first : <{0}> Last <{1}> Group <{2}> Randomint <{3}>",((BaseDataItem)dataItemsCollection[0]).DBValue,
@ -111,7 +134,7 @@ namespace ICSharpCode.Reporting.Test.DataSource
((BaseDataItem)dataItemsCollection[3]).DBValue); ((BaseDataItem)dataItemsCollection[3]).DBValue);
i ++; i ++;
}while (collectionSource.MoveNext()); }while (collectionSource.MoveNext());
*/
Assert.That(i,Is.EqualTo(collectionSource.Count)); Assert.That(i,Is.EqualTo(collectionSource.Count));
} }
@ -129,6 +152,15 @@ namespace ICSharpCode.Reporting.Test.DataSource
var collectionSource = new CollectionDataSource (list,reportSettings); var collectionSource = new CollectionDataSource (list,reportSettings);
collectionSource.Bind(); collectionSource.Bind();
int i = 0; int i = 0;
foreach (var element in collectionSource.SortedList) {
collectionSource.Fill(row,element);
var r = (BaseRowItem)row[0];
foreach (var result in r.Items) {
Assert.That(((BaseDataItem)result).DBValue,Is.Not.Empty);
}
i ++;
}
/*
do { do {
collectionSource.Fill(row); collectionSource.Fill(row);
var r = (BaseRowItem)row[0]; var r = (BaseRowItem)row[0];
@ -137,7 +169,7 @@ namespace ICSharpCode.Reporting.Test.DataSource
} }
i ++; i ++;
}while (collectionSource.MoveNext()); }while (collectionSource.MoveNext());
*/
Assert.That(i,Is.EqualTo(collectionSource.Count)); Assert.That(i,Is.EqualTo(collectionSource.Count));
} }
@ -167,13 +199,21 @@ namespace ICSharpCode.Reporting.Test.DataSource
var collectionSource = new CollectionDataSource (list,rs); var collectionSource = new CollectionDataSource (list,rs);
collectionSource.Bind(); collectionSource.Bind();
int i = 0; int i = 0;
foreach (var element in collectionSource.SortedList) {
collectionSource.Fill(row,element);
var res = (BaseDataItem)row.Find(c => ((BaseDataItem)c).ColumnName == "GroupItem");
Assert.That(res.DBValue,Is.Not.Empty);
i ++;
}
/*
do { do {
collectionSource.Fill(row); collectionSource.Fill(row);
var res = (BaseDataItem)row.Find(c => ((BaseDataItem)c).ColumnName == "GroupItem"); var res = (BaseDataItem)row.Find(c => ((BaseDataItem)c).ColumnName == "GroupItem");
Assert.That(res.DBValue,Is.Not.Empty); Assert.That(res.DBValue,Is.Not.Empty);
i ++; i ++;
}while (collectionSource.MoveNext()); }while (collectionSource.MoveNext());
*/
Assert.That(i,Is.EqualTo(collectionSource.Count)); Assert.That(i,Is.EqualTo(collectionSource.Count));
} }

Loading…
Cancel
Save