Browse Source

Wizard can create grouped Tablelayout

pull/2/head
peterforstmeier 15 years ago
parent
commit
8975a86e54
  1. 21
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/AbstractLayout.cs
  2. 22
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/ListLayout.cs
  3. 55
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/TableLayout.cs
  4. 5
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataNavigator.cs
  5. 1
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs
  6. 117
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/TableConverter.cs

21
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/AbstractLayout.cs

@ -170,6 +170,27 @@ namespace ICSharpCode.Reports.Addin.ReportWizard @@ -170,6 +170,27 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
}
#region Grouping
protected ICSharpCode.Reports.Core.BaseGroupedRow CreateGroupHeader(Point headerLocation)
{
ICSharpCode.Reports.Core.BaseDataItem dataItem = new ICSharpCode.Reports.Core.BaseDataItem();
dataItem.ColumnName = ReportModel.ReportSettings.GroupColumnsCollection[0].ColumnName;
dataItem.DataType = ReportModel.ReportSettings.GroupColumnsCollection[0].DataTypeName;
dataItem.Location = new Point (10,5);
dataItem.Size = new Size (150,20);
dataItem.Text = ReportModel.ReportSettings.GroupColumnsCollection[0].ColumnName;
ICSharpCode.Reports.Core.BaseGroupedRow groupHeader = new ICSharpCode.Reports.Core.BaseGroupedRow();
groupHeader.Location = headerLocation;
groupHeader.Size = new Size (300,30);
groupHeader.Items.Add(dataItem);
return groupHeader;
}
#endregion
protected ReportModel ReportModel {get; private set;}

22
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/ListLayout.cs

@ -46,7 +46,10 @@ namespace ICSharpCode.Reports.Addin.ReportWizard @@ -46,7 +46,10 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
}
if (base.ReportModel.ReportSettings.GroupColumnsCollection.Count > 0) {
InsertGroupHeader();
var groupheader = base.CreateGroupHeader(new Point (5,10));
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,100);
@ -62,23 +65,6 @@ namespace ICSharpCode.Reports.Addin.ReportWizard @@ -62,23 +65,6 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
}
private void InsertGroupHeader()
{
ICSharpCode.Reports.Core.BaseDataItem dataItem = new ICSharpCode.Reports.Core.BaseDataItem();
dataItem.ColumnName = base.ReportModel.ReportSettings.GroupColumnsCollection[0].ColumnName;
dataItem.DataType = base.ReportModel.ReportSettings.GroupColumnsCollection[0].DataTypeName;
dataItem.Location = new Point (10,5);
dataItem.Size = new Size (150,20);
dataItem.Text = base.ReportModel.ReportSettings.GroupColumnsCollection[0].ColumnName;
ICSharpCode.Reports.Core.BaseGroupedRow groupHeader = new ICSharpCode.Reports.Core.BaseGroupedRow();
groupHeader.Location = new Point(5,10);
groupHeader.Size = new Size (300,30);
groupHeader.Items.Add(dataItem);
base.ReportModel.DetailSection.Items.Add(groupHeader);
}
#endregion
}
}

55
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/TableLayout.cs

@ -4,6 +4,7 @@ @@ -4,6 +4,7 @@
using System;
using System.Drawing;
using ICSharpCode.Reports.Core;
using ICSharpCode.Reports.Core.Interfaces;
namespace ICSharpCode.Reports.Addin.ReportWizard
{
@ -43,36 +44,62 @@ namespace ICSharpCode.Reports.Addin.ReportWizard @@ -43,36 +44,62 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
AdjustContainer(base.ReportModel.DetailSection,table);
ICSharpCode.Reports.Core.BaseRowItem r1 = CreateRowWithTextColumns(table,
ICSharpCode.Reports.Core.BaseRowItem headerRow = CreateRowWithTextColumns(table,
this.reportItems);
Point insertLocation = new Point (margin.Left,headerRow.Location.Y + headerRow.Size.Height + margin.Bottom + margin.Top);
if (base.ReportModel.ReportSettings.GroupColumnsCollection.Count > 0) {
var groupHeader = base.CreateGroupHeader(insertLocation);
table.Items.Add(groupHeader);
insertLocation = new Point(margin.Left,insertLocation.Y + groupHeader.Size.Height + margin.Bottom + margin.Top);
}
ICSharpCode.Reports.Core.BaseRowItem r2 = new ICSharpCode.Reports.Core.BaseRowItem();
ICSharpCode.Reports.Core.BaseRowItem detailRow = new ICSharpCode.Reports.Core.BaseRowItem();
AdjustContainer (table,detailRow);
AdjustContainer (table,r2);
r2.Location = new Point (margin.Left,
r1.Location.Y + r1.Size.Height + margin.Bottom + margin.Top);
detailRow.Location = insertLocation;
int defX = r2.Size.Width / this.reportItems.Count;
int defX = detailRow.Size.Width / this.reportItems.Count;
int startX = r2.Location.X + margin.Left;
int startX = detailRow.Location.X + margin.Left;
foreach (ICSharpCode.Reports.Core.BaseReportItem ir in this.reportItems)
{
Point np = new Point(startX,margin.Top);
startX += defX;
ir.Location = np;
ir.Parent = r2;
r2.Items.Add(ir);
ir.Parent = detailRow;
detailRow.Items.Add(ir);
}
table.Size = new Size (table.Size.Width,
margin.Top + r1.Size.Height + margin.Bottom + r2.Size.Height + margin.Bottom);
insertLocation = new Point(margin.Left,insertLocation.Y + detailRow.Size.Height + margin.Bottom + margin.Top);
table.Items.Add (headerRow);
table.Items.Add (detailRow);
table.Size = CalculateContainerSize(table,margin);
section.Size = new Size (section.Size.Width,table.Size.Height + margin.Top + margin.Bottom);
table.Items.Add (r1);
table.Items.Add (r2);
base.ReportModel.DetailSection.Items.Add(table);
}
private Size CalculateContainerSize(ISimpleContainer container,System.Drawing.Printing.Margins margin)
{
int h = margin.Top;
foreach (ICSharpCode.Reports.Core.BaseReportItem item in container.Items)
{
h = h + item.Size.Height + margin.Bottom;
}
h = h + 3*margin.Bottom;
return new Size (container.Size.Width,h);
}
}
}

5
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataNavigator.cs

@ -43,10 +43,10 @@ namespace ICSharpCode.Reports.Core @@ -43,10 +43,10 @@ namespace ICSharpCode.Reports.Core
}
public bool HasMoreData {
public bool HasMoreData
{
get {
if (this.CurrentRow < store.IndexList.Count -1 ){
// if (this.CurrentRow < this.Count -1 ){
return true;
} else {
return false;
@ -122,6 +122,7 @@ namespace ICSharpCode.Reports.Core @@ -122,6 +122,7 @@ namespace ICSharpCode.Reports.Core
#endregion
#region Try make recursive with ChildNavigavtor
public IDataNavigator GetChildNavigator()

1
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs

@ -2,7 +2,6 @@ @@ -2,7 +2,6 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Drawing;
using System.Linq;

117
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/TableConverter.cs

@ -17,9 +17,8 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -17,9 +17,8 @@ namespace ICSharpCode.Reports.Core.Exporter
private ITableContainer baseTable;
public TableConverter(IDataNavigator dataNavigator,
ExporterPage singlePage,
ILayouter layouter ):base(dataNavigator,singlePage,layouter)
ExporterPage singlePage, ILayouter layouter ):base(dataNavigator,singlePage,layouter)
{
}
@ -88,31 +87,107 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -88,31 +87,107 @@ namespace ICSharpCode.Reports.Core.Exporter
Rectangle pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)simpleContainer,currentPosition);
if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds))
{
{
base.BuildNewPage(mylist,section);
currentPosition = BaseConverter.BaseConvert(mylist,headerContainer,
defaultLeftPos,
base.SectionBounds.ReportHeaderRectangle.Location);
}
currentPosition = BaseConverter.BaseConvert(mylist,simpleContainer,defaultLeftPos,currentPosition);
currentPosition = BaseConverter.BaseConvert(mylist,headerContainer,
defaultLeftPos,
base.SectionBounds.ReportHeaderRectangle.Location);
}
currentPosition = BaseConverter.BaseConvert(mylist,simpleContainer,defaultLeftPos,currentPosition);
simpleContainer.Size = base.RestoreSize;
}
while (base.DataNavigator.MoveNext());
//Allway's reset the DataNavigator
base.DataNavigator.Reset();
base.DataNavigator.MoveNext();
SectionBounds.ReportFooterRectangle = new Rectangle(SectionBounds.ReportFooterRectangle.Left,
currentPosition.Y,
SectionBounds.ReportFooterRectangle.Width,
SectionBounds.ReportFooterRectangle.Height);
}
}
}
return mylist;
}
private ExporterCollection old_ConvertInternal(ExporterCollection mylist)
{
Point currentPosition = new Point(PrintHelper.DrawingAreaRelativeToParent(this.baseTable.Parent,this.baseTable).Location.X,
base.SectionBounds.DetailStart.Y);
int defaultLeftPos = currentPosition.X;
Point dataAreaStart = new Point(baseTable.Items[0].Location.X,baseTable.Items[0].Location.Y + currentPosition.Y);
ISimpleContainer headerContainer = null;
this.baseTable.Items.SortByLocation();
foreach (ISimpleContainer simpleContainer in this.baseTable.Items)
{
if (simpleContainer.Items.Count > 0) {
simpleContainer.Location = new Point (simpleContainer.Location.X,simpleContainer.Location.Y);
simpleContainer.Parent = (BaseReportItem)this.baseTable;
base.SaveSize( new Size (simpleContainer.Size.Width,simpleContainer.Size.Height));
// Header/FooterRow
if (PrintHelper.IsTextOnlyRow(simpleContainer) ) {
headerContainer = simpleContainer;
currentPosition = BaseConverter.BaseConvert(mylist,headerContainer,defaultLeftPos,currentPosition);
}
else
{
// DataRegion
base.SaveSize(simpleContainer.Size);
do {
//
BaseSection section = this.baseTable.Parent as BaseSection;
PrintHelper.AdjustSectionLocation(section);
base.FillRow(simpleContainer);
StandardPrinter.EvaluateRow(base.Evaluator,mylist);
base.PrepareContainerForConverting(null,simpleContainer);
Rectangle pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)simpleContainer,currentPosition);
if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds))
{
base.BuildNewPage(mylist,section);
simpleContainer.Size = base.RestoreSize;
currentPosition = BaseConverter.BaseConvert(mylist,headerContainer,
defaultLeftPos,
base.SectionBounds.ReportHeaderRectangle.Location);
}
while (base.DataNavigator.MoveNext());
//Allway's reset the DataNavigator
base.DataNavigator.Reset();
base.DataNavigator.MoveNext();
SectionBounds.ReportFooterRectangle = new Rectangle(SectionBounds.ReportFooterRectangle.Left,
currentPosition.Y,
SectionBounds.ReportFooterRectangle.Width,
SectionBounds.ReportFooterRectangle.Height);
currentPosition = BaseConverter.BaseConvert(mylist,simpleContainer,defaultLeftPos,currentPosition);
simpleContainer.Size = base.RestoreSize;
}
while (base.DataNavigator.MoveNext());
//Allway's reset the DataNavigator
base.DataNavigator.Reset();
base.DataNavigator.MoveNext();
SectionBounds.ReportFooterRectangle = new Rectangle(SectionBounds.ReportFooterRectangle.Left,
currentPosition.Y,
SectionBounds.ReportFooterRectangle.Width,
SectionBounds.ReportFooterRectangle.Height);
}
}
return mylist;
}
return mylist;
}
}
}

Loading…
Cancel
Save