From 7914f4bf88ae9868ddd1ff4df998d3663b9e0768 Mon Sep 17 00:00:00 2001 From: peterforstmeier Date: Wed, 10 Nov 2010 20:13:18 +0100 Subject: [PATCH] ReportWizard create reports with GroupFooter --- .../ICSharpCode.Reports.Addin.csproj | 3 +- .../Project/ReportItems/BaseGroupFooter.cs | 22 +++++++ ...{BaseGroupedRow.cs => BaseGroupeHeader.cs} | 1 + .../ReportLayout/AbstractLayout.cs | 35 ++++++++--- .../ReportWizard/ReportLayout/ListLayout.cs | 44 ++++++++----- .../ReportWizard/ReportLayout/TableLayout.cs | 62 +++++++++++-------- .../Project/Toolbox/ToolboxProvider.cs | 18 +++--- .../ICSharpCode.Reports.Core.csproj | 1 + .../Project/BaseItems/BaseGroupeFooter.cs | 22 +++++++ 9 files changed, 152 insertions(+), 56 deletions(-) create mode 100644 src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/BaseGroupFooter.cs rename src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/{BaseGroupedRow.cs => BaseGroupeHeader.cs} (99%) create mode 100644 src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseGroupeFooter.cs diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/ICSharpCode.Reports.Addin.csproj b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/ICSharpCode.Reports.Addin.csproj index 4f8bba4d8e..69c4c652c2 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/ICSharpCode.Reports.Addin.csproj +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/ICSharpCode.Reports.Addin.csproj @@ -145,6 +145,7 @@ Component + Component @@ -170,7 +171,7 @@ Component - + diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/BaseGroupFooter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/BaseGroupFooter.cs new file mode 100644 index 0000000000..bb8eade19a --- /dev/null +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/BaseGroupFooter.cs @@ -0,0 +1,22 @@ +/* + * Created by SharpDevelop. + * User: Peter Forstmeier + * Date: 07.11.2010 + * Time: 19:33 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; + +namespace ICSharpCode.Reports.Addin +{ + /// + /// Description of BaseGroupFooter. + /// + public class GroupFooter:BaseGroupedRow + { + public GroupFooter() + { + } + } +} diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/BaseGroupedRow.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/BaseGroupeHeader.cs similarity index 99% rename from src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/BaseGroupedRow.cs rename to src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/BaseGroupeHeader.cs index 105c396c2a..57f51f2b86 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/BaseGroupedRow.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/BaseGroupeHeader.cs @@ -22,6 +22,7 @@ namespace ICSharpCode.Reports.Addin TypeDescriptor.AddProvider(new GroupedRowTypeProvider(), typeof(BaseGroupedRow)); } + [Category("Behavior")] public bool PageBreakOnGroupChange {get;set;} } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/AbstractLayout.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/AbstractLayout.cs index 181e4e4f06..e4b839d24b 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/AbstractLayout.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/AbstractLayout.cs @@ -77,7 +77,7 @@ namespace ICSharpCode.Reports.Addin.ReportWizard item.Location = p; } - + protected static void AdjustContainer (ISimpleContainer parent, ICSharpCode.Reports.Core.BaseReportItem item) { @@ -92,9 +92,9 @@ namespace ICSharpCode.Reports.Addin.ReportWizard #region HeaderColumns - protected static ICSharpCode.Reports.Core.BaseRowItem CreateRowWithTextColumns(ISimpleContainer parent,ReportItemCollection items) + protected ICSharpCode.Reports.Core.BaseRowItem CreateRowWithTextColumns(ISimpleContainer parent) { - ReportItemCollection colDetail = AbstractLayout.HeaderColumnsFromReportItems(items); + ReportItemCollection colDetail = AbstractLayout.HeaderColumnsFromReportItems(ReportItems); ICSharpCode.Reports.Core.BaseRowItem row = new ICSharpCode.Reports.Core.BaseRowItem(); AdjustContainer(parent,row); @@ -136,15 +136,15 @@ namespace ICSharpCode.Reports.Addin.ReportWizard #endregion - protected ReportItemCollection AddItemsToContainer (ReportItemCollection items) + protected ReportItemCollection AddItemsToContainer () { int locationX = GlobalValues.ControlMargins.Left; - var minCtrlWidth = CalculateControlWidth(ParentItem,items); + var minCtrlWidth = CalculateControlWidth(ParentItem,ReportItems); var col = new ReportItemCollection(); - foreach (var ir in items) { + foreach (var ir in ReportItems) { ir.Location = new Point(locationX,GlobalValues.ControlMargins.Top); col.Add(ir); locationX += minCtrlWidth; @@ -155,7 +155,7 @@ namespace ICSharpCode.Reports.Addin.ReportWizard protected static int CalculateControlWidth(ISimpleContainer row, ReportItemCollection colDetail) { - return row.Size.Width / colDetail.Count; + return row.Size.Width / colDetail.Count; } @@ -179,12 +179,31 @@ namespace ICSharpCode.Reports.Addin.ReportWizard return groupHeader; } + + protected ICSharpCode.Reports.Core.GroupFooter CreateFooter (Point footerLocation) + { + ICSharpCode.Reports.Core.GroupFooter groupFooter = new ICSharpCode.Reports.Core.GroupFooter(); + groupFooter.Location = footerLocation; + groupFooter.Size = new Size (300,30); +// groupFooter.Items.Add(dataItem); + return groupFooter; + } + + + protected void ConfigureDetails (Point detailLocation,Size detailSize) + { + ParentItem.Location = detailLocation; + ParentItem.Size = detailSize; + } + #endregion protected ReportModel ReportModel {get; private set;} - + protected ISimpleContainer ParentItem {get;set;} + protected ReportItemCollection ReportItems {get;set;} + } } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/ListLayout.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/ListLayout.cs index f70730169f..1bb673c857 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/ListLayout.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/ListLayout.cs @@ -15,12 +15,10 @@ namespace ICSharpCode.Reports.Addin.ReportWizard public class ListLayout : AbstractLayout { - ReportItemCollection reportItems; - - + public ListLayout(ReportModel reportModel,ReportItemCollection reportItemCollection):base(reportModel) { - this.reportItems = reportItemCollection; + base.ReportItems = reportItemCollection; ICSharpCode.Reports.Core.BaseRowItem row = new ICSharpCode.Reports.Core.BaseRowItem(); AdjustContainer(base.ReportModel.DetailSection,row); base.ParentItem = row; @@ -33,8 +31,8 @@ namespace ICSharpCode.Reports.Addin.ReportWizard public override void CreatePageHeader() { base.CreatePageHeader(); - ICSharpCode.Reports.Core.BaseRowItem row = CreateRowWithTextColumns(base.ReportModel.PageHeader, - this.reportItems); + ICSharpCode.Reports.Core.BaseRowItem row = CreateRowWithTextColumns(base.ReportModel.PageHeader); + AdjustContainer(ParentItem,row); base.ReportModel.PageHeader.Items.Add(row); } @@ -45,25 +43,43 @@ namespace ICSharpCode.Reports.Addin.ReportWizard if (section == null) { throw new ArgumentNullException("section"); } + Size detailSize = Size.Empty; + Size itemSize = Size.Empty; if (base.ReportModel.ReportSettings.GroupColumnsCollection.Count > 0) { var groupheader = base.CreateGroupHeader(new Point (GlobalValues.ControlMargins.Left,GlobalValues.ControlMargins.Top)); - base.ReportModel.DetailSection.Items.Add(groupheader); - ParentItem.Location = new Point(ParentItem.Location.X,50); - ParentItem.Size = new Size(ParentItem.Size.Width,40); - section.Size = new Size(section.Size.Width,90); + // Detail + itemSize = CreateDetail(); + detailSize = new Size(ParentItem.Size.Width,itemSize.Height + GlobalValues.ControlMargins.Top + GlobalValues.ControlMargins.Bottom); + + + // GroupFooter + var groupFooter = base.CreateFooter(new Point(GlobalValues.ControlMargins.Left,80)); + base.ReportModel.DetailSection.Items.Add(groupFooter); + section.Size = new Size(section.Size.Width,125); } - - var items = base.AddItemsToContainer(this.reportItems); - ParentItem.Items.AddRange(items); - ParentItem.Size = new Size(ParentItem.Size.Width,items[0].Size.Height + GlobalValues.ControlMargins.Top + GlobalValues.ControlMargins.Bottom); + else + { + itemSize = CreateDetail(); + detailSize = new Size(ParentItem.Size.Width,itemSize.Height + GlobalValues.ControlMargins.Top + GlobalValues.ControlMargins.Bottom); + section.Size = new Size(section.Size.Width,ParentItem.Size.Height + GlobalValues.ControlMargins.Top + GlobalValues.ControlMargins.Bottom); + } + base.ConfigureDetails ( new Point(ParentItem.Location.X,45),detailSize); section.Items.Add(ParentItem as BaseReportItem); } + + Size CreateDetail() + { + var items = base.AddItemsToContainer(); + ParentItem.Items.AddRange(items); + return items[0].Size; + } + #endregion } } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/TableLayout.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/TableLayout.cs index d703c69ca9..ded2a68d45 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/TableLayout.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/TableLayout.cs @@ -14,12 +14,10 @@ namespace ICSharpCode.Reports.Addin.ReportWizard public class TableLayout: AbstractLayout { - ReportItemCollection reportItems; - public TableLayout(ReportModel reportModel,ReportItemCollection reportItemCollection):base(reportModel) { - this.reportItems = reportItemCollection; + ReportItems = reportItemCollection; } @@ -39,62 +37,76 @@ namespace ICSharpCode.Reports.Addin.ReportWizard System.Drawing.Printing.Margins margin = GlobalValues.ControlMargins; ICSharpCode.Reports.Core.BaseTableItem table = new ICSharpCode.Reports.Core.BaseTableItem(); + ICSharpCode.Reports.Core.BaseRowItem detailRow = new ICSharpCode.Reports.Core.BaseRowItem(); + table.Name = "Table1"; + base.ParentItem = table; AdjustContainer(base.ReportModel.DetailSection,table); base.ReportModel.DetailSection.Items.Add(table); - base.ParentItem = table; - - ICSharpCode.Reports.Core.BaseRowItem headerRow = CreateRowWithTextColumns(ParentItem, this.reportItems); - ParentItem.Items.Add (headerRow); + ICSharpCode.Reports.Core.BaseRowItem headerRow = CreateRowWithTextColumns(ParentItem); + ParentItem.Items.Add (headerRow); Point insertLocation = new Point (margin.Left,headerRow.Location.Y + headerRow.Size.Height + margin.Bottom + margin.Top); - if (base.ReportModel.ReportSettings.GroupColumnsCollection.Count > 0) { + if (base.ReportModel.ReportSettings.GroupColumnsCollection.Count > 0) { + + //Groupheader var groupHeader = base.CreateGroupHeader(insertLocation); ParentItem.Items.Add(groupHeader); insertLocation = new Point(margin.Left,insertLocation.Y + groupHeader.Size.Height + margin.Bottom + margin.Top); + + //Detail + CreateDetail(detailRow,insertLocation); + ParentItem.Items.Add (detailRow); + + // GroupFooter + var groupFooter = base.CreateFooter(new Point(margin.Left,130)); + ParentItem.Items.Add(groupFooter); + + } + else + { + CreateDetail(detailRow,insertLocation); + ParentItem.Items.Add (detailRow); } - //Insert details allways - - ICSharpCode.Reports.Core.BaseRowItem detailRow = new ICSharpCode.Reports.Core.BaseRowItem(); + CalculateContainerSize(); + section.Size = new Size (section.Size.Width,ParentItem.Size.Height + margin.Top + margin.Bottom); + } + + + void CreateDetail (ICSharpCode.Reports.Core.BaseRowItem detailRow,Point insertLocation) + { AdjustContainer (ParentItem,detailRow); - detailRow.Location = insertLocation; detailRow.Size = new Size(detailRow.Size.Width,30); - - int defX = AbstractLayout.CalculateControlWidth(detailRow,reportItems); + int defX = AbstractLayout.CalculateControlWidth(detailRow,ReportItems); - int startX = margin.Left; + int startX = GlobalValues.ControlMargins.Left; - foreach (ICSharpCode.Reports.Core.BaseReportItem ir in this.reportItems) + foreach (ICSharpCode.Reports.Core.BaseReportItem ir in ReportItems) { - Point np = new Point(startX,margin.Top); + Point np = new Point(startX,GlobalValues.ControlMargins.Top); startX += defX; ir.Location = np; ir.Parent = detailRow; detailRow.Items.Add(ir); } - - ParentItem.Items.Add (detailRow); - ParentItem.Size = CalculateContainerSize(ParentItem); - section.Size = new Size (section.Size.Width,ParentItem.Size.Height + margin.Top + margin.Bottom); } - private Size CalculateContainerSize(ISimpleContainer container) + private void CalculateContainerSize() { int h = GlobalValues.ControlMargins.Top; - foreach (ICSharpCode.Reports.Core.BaseReportItem item in container.Items) + foreach (ICSharpCode.Reports.Core.BaseReportItem item in ParentItem.Items) { h = h + item.Size.Height + GlobalValues.ControlMargins.Bottom; } h = h + 3*GlobalValues.ControlMargins.Bottom; - - return new Size (container.Size.Width,h); + ParentItem.Size = new Size (ParentItem.Size.Width,h); } } } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/Toolbox/ToolboxProvider.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/Toolbox/ToolboxProvider.cs index dd2bbe243c..c9ce298065 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/Toolbox/ToolboxProvider.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/Toolbox/ToolboxProvider.cs @@ -67,19 +67,21 @@ namespace ICSharpCode.Reports.Addin tb.DisplayName = ResourceService.GetString("SharpReport.Toolbar.DataRow"); sideTab.Items.Add(new SideTabItemDesigner(tb)); - /* - //Group - tb = new ToolboxItem(typeof(ICSharpCode.Reports.Addin.BaseGroupItem)); - tb.Bitmap = WinFormsResourceService.GetBitmap("Icons.16x16.SharpQuery.Table"); - tb.DisplayName = "SimpleGroupItem"; - sideTab.Items.Add(new SideTabItemDesigner(tb)); - */ + //GroupHeader tb = new ToolboxItem(typeof(ICSharpCode.Reports.Addin.BaseGroupedRow)); tb.Bitmap = WinFormsResourceService.GetBitmap("Icons.16x16.SharpQuery.Table"); - tb.DisplayName = "GroupHeaderRow"; + tb.DisplayName = "GroupHeader"; + sideTab.Items.Add(new SideTabItemDesigner(tb)); + + + //GroupFooter + tb = new ToolboxItem(typeof(ICSharpCode.Reports.Addin.GroupFooter)); + tb.Bitmap = WinFormsResourceService.GetBitmap("Icons.16x16.SharpQuery.Table"); + tb.DisplayName = "GroupFooter"; sideTab.Items.Add(new SideTabItemDesigner(tb)); + //BaseTable tb.Bitmap = WinFormsResourceService.GetBitmap("Icons.16x16.SharpQuery.Table"); tb = new ToolboxItem(typeof(ICSharpCode.Reports.Addin.BaseTableItem)); diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj index a37e93aa74..08943790e7 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj @@ -90,6 +90,7 @@ + diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseGroupeFooter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseGroupeFooter.cs new file mode 100644 index 0000000000..a8b1fae0b3 --- /dev/null +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseGroupeFooter.cs @@ -0,0 +1,22 @@ +/* + * Created by SharpDevelop. + * User: Peter Forstmeier + * Date: 07.11.2010 + * Time: 19:44 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; + +namespace ICSharpCode.Reports.Core +{ + /// + /// Description of BaseGroupeFooter. + /// + public class GroupFooter:BaseGroupItem + { + public GroupFooter() + { + } + } +}