diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/BaseListStrategy.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/BaseListStrategy.cs index 4db53e2d78..8481d13412 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/BaseListStrategy.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/BaseListStrategy.cs @@ -42,9 +42,7 @@ namespace ICSharpCode.Reports.Core { internal abstract class BaseListStrategy :IDataViewStrategy,IEnumerator { - //Index to plain Datat private IndexList indexList; - private AvailableFieldsCollection availableFields; @@ -76,6 +74,7 @@ namespace ICSharpCode.Reports.Core { protected ReportSettings ReportSettings {get;private set;} + #region Sorting delegates protected static List GenericSorter (List list) @@ -93,9 +92,27 @@ namespace ICSharpCode.Reports.Core { return lbc; } + #endregion + + #region Grouping + + protected GroupComparer CreateGroupHeader (BaseComparer sc) + { + GroupComparer gc = new GroupComparer(sc.ColumnCollection,sc.ListIndex,sc.ObjectArray); + IndexList.Add(gc); + return gc; + } + + protected void CreateGroupeChildren(IndexList list,BaseComparer sc) + { + string v = sc.ObjectArray[0].ToString(); + list.Add(sc); + } #endregion + #region Debug Code + protected static void ShowIndexList (IndexList list) { foreach (BaseComparer element in list) { @@ -116,12 +133,14 @@ namespace ICSharpCode.Reports.Core { } } + #endregion public virtual void Reset() { this.indexList.CurrentPosition = -1; } + public virtual object Current { get { diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/CollectionStrategy.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/CollectionStrategy.cs index 476f2ceca6..bcaeb743df 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/CollectionStrategy.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/CollectionStrategy.cs @@ -46,10 +46,6 @@ namespace ICSharpCode.Reports.Core { #endregion - #region build grouping - - #endregion - #region build sorting @@ -168,7 +164,54 @@ namespace ICSharpCode.Reports.Core { } } + public override void Group () + { + base.Group(); + IndexList gl = new IndexList("group"); + gl = this.BuildSortIndex (ReportSettings.GroupColumnsCollection); + ShowIndexList(gl); + BuildGroup(gl); + } + + private void BuildGroup (IndexList list) + { + string compVal = String.Empty; + base.IndexList.Clear(); + IndexList childList = null; + BaseComparer checkElem = list[0]; + foreach (BaseComparer element in list) + { + string v = element.ObjectArray[0].ToString(); + if (compVal != v) { + childList = new IndexList(); + GroupComparer gc = base.CreateGroupHeader(element); + gc.IndexList = childList; + + CreateGroupeChildren(childList,element); + } else { + CreateGroupeChildren(childList,element); + } + compVal = v; + } + ShowIndexList(base.IndexList); + } + + /* + private GroupComparer BuildGroupHeader (BaseComparer sc) + { + GroupComparer gc = new GroupComparer(sc.ColumnCollection,sc.ListIndex,sc.ObjectArray); + base.IndexList.Add(gc); + return gc; + } + + + private void GChild(IndexList list,BaseComparer sc) + { + string v = sc.ObjectArray[0].ToString(); + list.Add(sc); + } + */ public override void Sort() { base.Sort(); @@ -185,6 +228,8 @@ namespace ICSharpCode.Reports.Core { } + + public override void Reset() { this.CurrentPosition = 0; @@ -195,7 +240,9 @@ namespace ICSharpCode.Reports.Core { public override void Bind() { base.Bind(); - if (base.ReportSettings.SortColumnsCollection != null) { + if (base.ReportSettings.GroupColumnsCollection.Count > 0) { + this.Group(); + } else { this.Sort (); } Reset(); diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/TableStrategy.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/TableStrategy.cs index 8bcff305dd..51ce24cb87 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/TableStrategy.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/TableStrategy.cs @@ -161,32 +161,33 @@ namespace ICSharpCode.Reports.Core string v = element.ObjectArray[0].ToString(); if (compVal != v) { childList = new IndexList(); - GroupComparer gc = BuildGroupHeader(element); + GroupComparer gc = base.CreateGroupHeader(element); gc.IndexList = childList; - - GChild(childList,element); + CreateGroupeChildren(childList,element); } else { - GChild(childList,element); + CreateGroupeChildren(childList,element); } compVal = v; } ShowIndexList(base.IndexList); } - private GroupComparer BuildGroupHeader (BaseComparer sc) - { - GroupComparer gc = new GroupComparer(sc.ColumnCollection,sc.ListIndex,sc.ObjectArray); - base.IndexList.Add(gc); - return gc; - } +// private GroupComparer CreateGroupHeader (BaseComparer sc) +// { +// GroupComparer gc = new GroupComparer(sc.ColumnCollection,sc.ListIndex,sc.ObjectArray); +// base.IndexList.Add(gc); +// return gc; +// } - private void GChild(IndexList list,BaseComparer sc) + /* + + private void CreateGroupeChildren(IndexList list,BaseComparer sc) { string v = sc.ObjectArray[0].ToString(); list.Add(sc); } - + */ private IndexList IndexBuilder(SortColumnCollection col) { diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/GroupListFixture.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/GroupListFixture.cs new file mode 100644 index 0000000000..6b7826fe73 --- /dev/null +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/GroupListFixture.cs @@ -0,0 +1,67 @@ +/* + * Created by SharpDevelop. + * User: Peter Forstmeier + * Date: 09.09.2010 + * Time: 19:50 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ + +using System; +using System.ComponentModel; +using ICSharpCode.Reports.Core.Test.TestHelpers; +using NUnit.Framework; + +namespace ICSharpCode.Reports.Core.Test.DataManager +{ + [TestFixture] + public class GroupListFixture + { + + ContributorCollection contributorCollection; + + + [Test] + public void GroupingCollection_Empty_IsGrouped_False() + { + IDataManager dm = ICSharpCode.Reports.Core.DataManager.CreateInstance(this.contributorCollection,new ReportSettings()); + DataNavigator dataNav = dm.GetNavigator; + + Assert.That(dataNav.IsGrouped == false); + } + + + [Test] + public void GroupingCollection_Contains_IsGrouped_True() + { + var dataNav = PrepareStringGrouping(); + Assert.That(dataNav.IsGrouped,Is.True); + } + + + private IDataNavigator PrepareStringGrouping () + { + GroupColumn gc = new GroupColumn("GroupItem",1,ListSortDirection.Ascending); + ReportSettings rs = new ReportSettings(); + rs.GroupColumnsCollection.Add(gc); + IDataManager dm = ICSharpCode.Reports.Core.DataManager.CreateInstance(this.contributorCollection,rs); + return dm.GetNavigator; + } + + + [TestFixtureSetUp] + public void Init() + { + ContributorsList contributorsList = new ContributorsList(); + this.contributorCollection = contributorsList.ContributorCollection; + } + + + + [TestFixtureTearDown] + public void Dispose() + { + // TODO: Add tear down code. + } + } +} diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/GroupTableFixture.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/GroupTableFixture.cs index b1d4947a7a..d532a28e1a 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/GroupTableFixture.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/GroupTableFixture.cs @@ -35,7 +35,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager #region Group by String [Test] - public void GroupingCollection_Contains_IsGrouped_False() + public void GroupingCollection_Contains_IsGrouped_True() { var dataNav = PrepareStringGrouping(); Assert.That(dataNav.IsGrouped == true); @@ -70,13 +70,15 @@ namespace ICSharpCode.Reports.Core.Test.DataManager public void DateTimeCan_FillChild() { var dataNav = PrepareDateTimeGrouping(); + + Console.WriteLine("start datetime"); while (dataNav.MoveNext()) { if (dataNav.HasChildren) { Assert.That(dataNav.HasChildren,Is.True); DataRow r = dataNav.Current as DataRow; - string v2 = r["last"].ToString() + " GroupVal :" + r[3].ToString(); + string v2 = r["last"].ToString() + " GroupVal :" + r[5].ToString(); Console.WriteLine(v2); - FillChildList(dataNav); + DateTimeChildList(dataNav); } } @@ -101,6 +103,8 @@ namespace ICSharpCode.Reports.Core.Test.DataManager } #endregion + + #region Read-Fill Child List [Test] @@ -120,20 +124,43 @@ namespace ICSharpCode.Reports.Core.Test.DataManager } - void FillChildList (IDataNavigator nav) + private void DateTimeChildList (IDataNavigator nav) { BaseDataItem first= new BaseDataItem("First"); BaseDataItem last = new BaseDataItem("Last"); + BaseDataItem datetime = new BaseDataItem("RandomDate"); + ReportItemCollection ric = new ReportItemCollection(); ric.Add(first); ric.Add(last); + ric.Add(datetime); nav.SwitchGroup(); do { nav.FillChild(ric); foreach (BaseDataItem element in ric) { - Console.WriteLine("\t{0} - {1}",element.ColumnName,element.DBValue); + Console.WriteLine("\t{0} - {1} ",element.ColumnName,element.DBValue); + } + } + while ( nav.ChildMoveNext()); + } + + + private void FillChildList (IDataNavigator nav) + { + BaseDataItem first= new BaseDataItem("First"); + BaseDataItem last = new BaseDataItem("Last"); + + ReportItemCollection ric = new ReportItemCollection(); + + ric.Add(first); + ric.Add(last); + nav.SwitchGroup(); + do { + nav.FillChild(ric); + foreach (BaseDataItem element in ric) { + Console.WriteLine("\t{0} - {1} ",element.ColumnName,element.DBValue); } } while ( nav.ChildMoveNext()); @@ -225,6 +252,8 @@ namespace ICSharpCode.Reports.Core.Test.DataManager private IDataNavigator PrepareDateTimeGrouping () { + Console.WriteLine("PrepareDateTimeGrouping ()"); + GroupColumn gc = new GroupColumn("RandomDate",1,ListSortDirection.Ascending); ReportSettings rs = new ReportSettings(); rs.GroupColumnsCollection.Add(gc); diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ICSharpCode.Reports.Core.Test.csproj b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ICSharpCode.Reports.Core.Test.csproj index e019ddf04c..0bb55ebf78 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ICSharpCode.Reports.Core.Test.csproj +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ICSharpCode.Reports.Core.Test.csproj @@ -70,6 +70,7 @@ +