diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/BaseGroupedRow.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/BaseGroupedRow.cs index 748454f64a..e9ad4f2dbd 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/BaseGroupedRow.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/BaseGroupedRow.cs @@ -27,7 +27,8 @@ namespace ICSharpCode.Reports.Addin TypeDescriptor.AddProvider(new GroupedRowTypeProvider(), typeof(BaseGroupedRow)); } - + [Category("Behavior")] + public bool PageBreakOnGroupChange {get;set;} } @@ -83,16 +84,17 @@ namespace ICSharpCode.Reports.Addin prop = props.Find("Controls",true); allProperties.Add(prop); - /* - prop = props.Find("Padding",true); - allProperties.Add(prop); - */ + prop = props.Find("AlternateBackColor",true); allProperties.Add(prop); prop = props.Find("ChangeBackColorEveryNRow",true); allProperties.Add(prop); + prop = props.Find("PageBreakOnGroupChange",true); + allProperties.Add(prop); + + return new PropertyDescriptorCollection(allProperties.ToArray()); } } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/BaseTextItem.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/BaseTextItem.cs index 16b49d1693..2283cf97ca 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/BaseTextItem.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/BaseTextItem.cs @@ -91,10 +91,8 @@ namespace ICSharpCode.Reports.Addin [Browsable(true), Category("Appearance"), Description("String to format Number's Date's etc")] - [DefaultValue("entry1")] - -[TypeConverter(typeof(FormatStringConverter))] + [TypeConverter(typeof(FormatStringConverter))] public string FormatString { get { return formatString; } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseGroupedRow.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseGroupedRow.cs index 0ebdab4e74..107a90308a 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseGroupedRow.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseGroupedRow.cs @@ -17,7 +17,8 @@ namespace ICSharpCode.Reports.Core { public BaseGroupedRow():base() { - Console.WriteLine("Constr baseGroupedrow"); } + + public bool PageBreakOnGroupChange {get;set;} } } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataNavigator.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataNavigator.cs index 5b0df5742e..6190248a12 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataNavigator.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataNavigator.cs @@ -49,7 +49,8 @@ namespace ICSharpCode.Reports.Core public bool HasMoreData { get { - if (this.CurrentRow < this.Count -1 ){ + if (this.CurrentRow < store.IndexList.Count +1 ){ +// if (this.CurrentRow < this.Count -1 ){ return true; } else { return false; @@ -68,6 +69,7 @@ namespace ICSharpCode.Reports.Core public bool IsSorted {get {return this.store.IsSorted;}} + public bool IsGrouped {get {return this.store.IsGrouped;}} @@ -110,33 +112,6 @@ namespace ICSharpCode.Reports.Core } } - - /* - public int ChildListCount - { - get { - return BuildChildList().Count; - } - } - */ - - - // at the moment only tables are working - /* - public void FillChild (ReportItemCollection collection) - { - TableStrategy tableStrategy = store as TableStrategy; - foreach (var item in collection) { - IDataItem dataItem = item as IDataItem; - if (dataItem != null) { - CurrentItemsCollection currentItemsCollection = tableStrategy.FillDataRow(ce.Current.ListIndex); - CurrentItem s = currentItemsCollection.FirstOrDefault(x => x.ColumnName == dataItem.ColumnName); - dataItem.DBValue = s.Value.ToString(); - } - - } - } - */ private IndexList BuildChildList() { 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 fa9e30416a..d2fb53a753 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 @@ -104,10 +104,10 @@ namespace ICSharpCode.Reports.Core public override void Group () { base.Group(); - IndexList gl = new IndexList("group"); - gl = this.BuildSortIndex (ReportSettings.GroupColumnsCollection); - ShowIndexList(gl); - BuildGroup(gl); + IndexList sortedIndexList = new IndexList("group"); + sortedIndexList = this.BuildSortIndex (ReportSettings.GroupColumnsCollection); + ShowIndexList(sortedIndexList); + BuildGroup(sortedIndexList); } 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 100fe11c6d..59d1133ad9 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 @@ -102,12 +102,24 @@ namespace ICSharpCode.Reports.Core.Exporter pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)section.Items[1],currentPosition); if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds )) { - base.BuildNewPage(exporterCollection,section); + ForcePagePreak (exporterCollection,section); +// base.BuildNewPage(exporterCollection,section); currentPosition = CalculateStartPosition (); } + + } - while ( childNavigator.MoveNext()); + if (PageBreakAfterGroupChange(section) ) { + var b = base.DataNavigator.HasMoreData; + Console.WriteLine("datanav {0}",b); + ForcePagePreak (exporterCollection,section); + Console.WriteLine ("PageBreakaftrer"); + + currentPosition = CalculateStartPosition (); + } + + var groupedRow = new Collection(section.Items.OfType().ToList()); base.Evaluator.SinglePage.IDataNavigator = base.DataNavigator; } } @@ -119,12 +131,13 @@ namespace ICSharpCode.Reports.Core.Exporter pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)section.Items[0],currentPosition); if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds)) { - base.BuildNewPage(exporterCollection,section); + ForcePagePreak (exporterCollection,section); currentPosition = CalculateStartPosition(); } ShouldDrawBorder (section,exporterCollection); + } while (base.DataNavigator.MoveNext()); @@ -136,18 +149,35 @@ namespace ICSharpCode.Reports.Core.Exporter } + + void ForcePagePreak(ExporterCollection exporterCollection, BaseSection section) + { + base.BuildNewPage(exporterCollection,section); + } + + + bool PageBreakAfterGroupChange(BaseSection section) + { + var groupedRowCollection = new Collection(section.Items.OfType().ToList()); + var groupedRow = groupedRowCollection[0]; + Console.WriteLine(base.DataNavigator.HasMoreData); + + return groupedRow.PageBreakOnGroupChange; + } + + private Point CalculateStartPosition() { return new Point(base.SectionBounds.PageHeaderRectangle.X,base.SectionBounds.PageHeaderRectangle.Y); } - private Point ConvertGroupHeader(ExporterCollection mylist,BaseSection section,ISimpleContainer simpleContainer,int leftPos,Point offset) + private Point ConvertGroupHeader(ExporterCollection exportList,BaseSection section,ISimpleContainer simpleContainer,int leftPos,Point offset) { Point retVal = Point.Empty; ReportItemCollection groupCollection = null; - var grh = new Collection(section.Items.OfType().ToList()); - if (grh.Count == 0) { + var groupedRow = new Collection(section.Items.OfType().ToList()); + if (groupedRow.Count == 0) { groupCollection = section.Items.ExtractGroupedColumns(); base.DataNavigator.Fill(groupCollection); base.FireSectionRendering(section); @@ -155,11 +185,11 @@ namespace ICSharpCode.Reports.Core.Exporter StandardPrinter.EvaluateRow(base.Evaluator,list); - mylist.AddRange(list); + exportList.AddRange(list); AfterConverting (section,list); retVal = new Point (leftPos,offset.Y + groupCollection[0].Size.Height + 20 + (3 *GlobalValues.GapBetweenContainer)); } else { - retVal = ConvertStandardRow(mylist,section,grh[0],leftPos,offset); + retVal = ConvertStandardRow(exportList,section,groupedRow[0],leftPos,offset); } return retVal; }