diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/PrintHelper.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/PrintHelper.cs index 3e37a19f5e..9886f42cd9 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/PrintHelper.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/PrintHelper.cs @@ -28,7 +28,6 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing public static void SetLayoutForRow (Graphics graphics, ILayouter layouter,ISimpleContainer row) { -// BaseReportItem item = row as BaseReportItem; Rectangle textRect = layouter.Layout(graphics,row); if (textRect.Height > row.Size.Height) { row.Size = new Size(row.Size.Width,textRect.Height); diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Collections/Collections.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Collections/Collections.cs index 17646683af..4db4364359 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Collections/Collections.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Collections/Collections.cs @@ -10,8 +10,9 @@ using System.Collections.Generic; using System.Collections.ObjectModel; using System.Globalization; using System.Linq; -using ICSharpCode.Reports.Core; + using ICSharpCode.Reports.Core.Exporter; +using ICSharpCode.Reports.Core.Interfaces; namespace ICSharpCode.Reports.Core{ @@ -60,8 +61,6 @@ namespace ICSharpCode.Reports.Core{ /// public class ReportItemCollection : Collection { - public event EventHandler> Added; - public event EventHandler> Removed; // Trick to get the inner list as List (InnerList always has that type because we only use // the parameterless constructor on Collection) @@ -143,7 +142,6 @@ namespace ICSharpCode.Reports.Core{ protected override void InsertItem(int index, BaseReportItem item) { base.InsertItem(index, item); - this.OnAdded (item); } @@ -151,20 +149,45 @@ namespace ICSharpCode.Reports.Core{ { BaseReportItem item = this[index]; base.RemoveItem(index); - this.OnRemoved(item); + } + + #region Grouphandling + + public bool HasGroupColumns + { + get { + return CreateGroupedList().Count > 0; + } } - void OnAdded(BaseReportItem item){ - if (Added != null) - Added(this, new CollectionChangedEventArgs(item)); + private Collection CreateGroupedList () + { + Collection inheritedReportItems = null; + foreach (BaseReportItem element in this) { + ISimpleContainer container = element as ISimpleContainer; + if (container == null) { + inheritedReportItems = new Collection(this.OfType().ToList()); + break; + } else { + inheritedReportItems = new Collection(container.Items.OfType().ToList()); + break; + + } + } + return inheritedReportItems; } - void OnRemoved( BaseReportItem item){ - if (Removed != null) - Removed(this, new CollectionChangedEventArgs(item)); + public ReportItemCollection ExtractGroupedColumns () + { + Collection inheritedReportItems = CreateGroupedList(); + ReportItemCollection r = new ReportItemCollection(); + r.AddRange(inheritedReportItems); + return r; } + + #endregion } /// @@ -203,7 +226,7 @@ namespace ICSharpCode.Reports.Core{ { } - public AbstractColumn Find (string columnName) + public new AbstractColumn Find (string columnName) { if (String.IsNullOrEmpty(columnName)) { throw new ArgumentNullException("columnName"); @@ -225,7 +248,7 @@ namespace ICSharpCode.Reports.Core{ /// The Culture is used for direct String Comparison /// - public static CultureInfo Culture + public new static CultureInfo Culture { get { return CultureInfo.CurrentCulture;} } @@ -239,7 +262,7 @@ namespace ICSharpCode.Reports.Core{ { } - public AbstractColumn Find (string columnName) + public new AbstractColumn Find (string columnName) { if (String.IsNullOrEmpty(columnName)) { throw new ArgumentNullException("columnName"); diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs index 0fdb03d7d6..453e7999f3 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs @@ -28,10 +28,8 @@ namespace ICSharpCode.Reports.Core.Exporter private BaseReportItem parent; public RowConverter(IDataNavigator dataNavigator, - ExporterPage singlePage, - - ILayouter layouter):base(dataNavigator,singlePage,layouter) - { + ExporterPage singlePage, ILayouter layouter):base(dataNavigator,singlePage,layouter) + { } public override ExporterCollection Convert(BaseReportItem parent, BaseReportItem item) @@ -78,21 +76,17 @@ namespace ICSharpCode.Reports.Core.Exporter // Grouping Header - if (base.DataNavigator.HasChildren) + if (section.Items.HasGroupColumns) { + currentPosition = TestDecorateElement(mylist,section,simpleContainer,defaultLeftPos,currentPosition); + } + else { - TestDecorateElement(simpleContainer); + base.FillRow(simpleContainer); + PrepareContainerForConverting(simpleContainer); + base.FireSectionRendering(section); + StandardPrinter.EvaluateRow(base.Evaluator,mylist); + currentPosition = BaseConverter.BaseConvert(mylist,simpleContainer,defaultLeftPos,currentPosition); } - -// Collection inheritedReportItems = new Collection(simpleContainer.Items.OfType().ToList()); - - base.FillRow(simpleContainer); - - PrepareContainerForConverting(simpleContainer); - - base.FireSectionRendering(section); - StandardPrinter.EvaluateRow(base.Evaluator,mylist); - currentPosition = BaseConverter.BaseConvert(mylist,simpleContainer,defaultLeftPos,currentPosition); - AfterConverting (section); // Grouping Items ---------------------- @@ -105,6 +99,7 @@ namespace ICSharpCode.Reports.Core.Exporter ((BaseReportItem)simpleContainer).BackColor = color; base.DataNavigator.FillChild(simpleContainer.Items); + PrepareContainerForConverting(simpleContainer); base.FireSectionRendering(section); @@ -150,7 +145,31 @@ namespace ICSharpCode.Reports.Core.Exporter } - private Color TestDecorateElement(ISimpleContainer simpleContainer) + + private Point TestDecorateElement(ExporterCollection mylist,BaseSection section,ISimpleContainer simpleContainer,int leftPos,Point offset) + { + + /* + base.FillRow(simpleContainer); + PrepareContainerForConverting(simpleContainer); + + base.FireSectionRendering(section); + StandardPrinter.EvaluateRow(base.Evaluator,mylist); +// currentPosition = BaseConverter.BaseConvert(mylist,simpleContainer,defaultLeftPos,currentPosition); + */ + + var groupCollection = section.Items.ExtractGroupedColumns(); + base.DataNavigator.Fill(groupCollection); + base.FireSectionRendering(section); + StandardPrinter.EvaluateRow(base.Evaluator,mylist); + ExporterCollection list = StandardPrinter.ConvertPlainCollection(groupCollection,offset); + mylist.AddRange(list); + + return new Point (leftPos,offset.Y + groupCollection[0].Size.Height + 20 + (3 *GlobalValues.GapBetweenContainer)); + } + + + private Color old_TestDecorateElement(ISimpleContainer simpleContainer) { BaseReportItem i = simpleContainer as BaseReportItem; var retval = i.BackColor; diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/Collections/ReportItemCollectionFixture.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/Collections/ReportItemCollectionFixture.cs index 168d17c4b5..296411d1f2 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/Collections/ReportItemCollectionFixture.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/Collections/ReportItemCollectionFixture.cs @@ -19,7 +19,6 @@ namespace ICSharpCode.Reports.Core.Test.Basics { private ReportItemCollection itemCollection; - private bool gotEvent; [Test] @@ -74,27 +73,18 @@ namespace ICSharpCode.Reports.Core.Test.Basics public void InsertOneItem () { itemCollection = this.PlainCollection(); - itemCollection.Added += OnItemAdded; int len = itemCollection.Count(); BaseReportItem r = new BaseReportItem(); r.Name = "Inserted"; itemCollection.Insert(1,r); Assert.AreEqual (len + 1,itemCollection.Count()); - Assert.IsTrue(gotEvent,"No inserted' Event"); - this.gotEvent = false; + // read inserted element and check some default values BaseReportItem r1 = itemCollection.Find("Inserted"); Assert.AreEqual(GlobalValues.DefaultBackColor,r1.BackColor); Assert.AreEqual(System.Drawing.Color.Black,r1.ForeColor); } - - private void OnItemAdded (object sender,CollectionChangedEventArgs e) - { - this.gotEvent = true; - Assert.AreEqual ("Inserted",e.Item.Name,"Item should be the same as we insert"); - } - #endregion #region delete/remove @@ -104,11 +94,8 @@ namespace ICSharpCode.Reports.Core.Test.Basics { itemCollection = this.PlainCollection(); int i = itemCollection.Count; - itemCollection.Removed += OnRemoveItem; itemCollection.RemoveAt(1); Assert.AreEqual(i-1,itemCollection.Count) ; - Assert.IsTrue(gotEvent,"No 'removed' Event"); - gotEvent = false; } @@ -117,13 +104,10 @@ namespace ICSharpCode.Reports.Core.Test.Basics { itemCollection = this.PlainCollection(); int i = itemCollection.Count; - itemCollection.Removed += OnRemoveItem; BaseReportItem r = itemCollection[1]; Assert.AreEqual("t2",r.Name); itemCollection.Remove (r); Assert.AreEqual(i-1,itemCollection.Count); - Assert.IsTrue(gotEvent,"No 'removed' Event"); - gotEvent = false; } @@ -167,13 +151,6 @@ namespace ICSharpCode.Reports.Core.Test.Basics #region privates - private void OnRemoveItem (object sender,CollectionChangedEventArgs e) - { - gotEvent = true; - Assert.AreEqual("t2",e.Item.Name); - } - - private ReportItemCollection PlainCollection() { ReportItemCollection ri = new ReportItemCollection();