Browse Source

Merge remote branch 'origin/reports' into 4.0

pull/14/head
Daniel Grunwald 15 years ago
parent
commit
55edf3e0c4
  1. 2
      samples/SharpDevelopReports/src/SharpReportSamples/MainForm.cs
  2. 4
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/ICSharpCode.Reports.Addin.csproj
  3. 44
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/BaseGroupItem.cs
  4. 22
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/GroupFooter.cs
  5. 7
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/GroupHeader.cs
  6. 36
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/AbstractLayout.cs
  7. 51
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/ListLayout.cs
  8. 60
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportLayout/TableLayout.cs
  9. 9
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/WizardPanels/PushModelPanel.cs
  10. 18
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/Toolbox/ToolboxProvider.cs
  11. 2
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Test/ICSharpCode.Reports.Addin.Test.csproj
  12. 100
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Test/Wizard/Generators/GenerateListWithGroupFixture.cs
  13. 46
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Test/Wizard/Generators/GenerateTableWithGrouping.cs
  14. 6
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj
  15. 22
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/Layouter.cs
  16. 6
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/StandardPrinter.cs
  17. 17
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/SectionBounds.cs
  18. 5
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/SinglePage.cs
  19. 17
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseGroupItem.cs
  20. 20
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseSection.cs
  21. 24
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/GroupFooter.cs
  22. 4
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/GroupHeader.cs
  23. 22
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Collections/Collections.cs
  24. 14
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ChildNavigator.cs
  25. 3
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/BaseListStrategy.cs
  26. 2
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/CollectionStrategy.cs
  27. 2
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/TableStrategy.cs
  28. 30
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Events/GroupChangedEventArgs.cs
  29. 2
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Events/PrintEventArgs.cs
  30. 51
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Events/ReportParametersEventArgs.cs
  31. 69
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Events/SectionRenderEventArgs.cs
  32. 81
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs
  33. 161
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs
  34. 111
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs
  35. 115
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedTableConverter.cs
  36. 58
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/DataPageBuilder.cs
  37. 17
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/ExpressionEvaluatorFacade.cs
  38. 122
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/ReportingLanguage/ReportingLanguageCompiler.cs
  39. 5
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Compilation/Functions/AggregateFunctions/AggregateFunction.cs
  40. 3
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/IReportCreator.cs
  41. 4
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Interfaces/IItemConverter.cs
  42. 58
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/RenderTable.cs
  43. 80
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/ReportViewer/ReportViewer.cs
  44. 20
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/IntegrationTests/AggregateFunctionsFixture.cs
  45. 14
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/IntegrationTests/AggregateFunctionsFromIListFixture.cs
  46. 8
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/IntegrationTests/GlobalFunctions.cs

2
samples/SharpDevelopReports/src/SharpReportSamples/MainForm.cs

@ -13,7 +13,7 @@ using System.IO;
using System.Windows.Forms; using System.Windows.Forms;
using ICSharpCode.Reports.Core; using ICSharpCode.Reports.Core;
using ICSharpCode.Reports.Core.old_Exporter.ExportRenderer; using ICSharpCode.Reports.Core.Exporter.ExportRenderer;
namespace SharpReportSamples namespace SharpReportSamples
{ {

4
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/ICSharpCode.Reports.Addin.csproj

@ -145,7 +145,7 @@
<Compile Include="Project\ReportItems\BaseDataItem.cs"> <Compile Include="Project\ReportItems\BaseDataItem.cs">
<SubType>Component</SubType> <SubType>Component</SubType>
</Compile> </Compile>
<Compile Include="Project\ReportItems\BaseGroupItem.cs" /> <Compile Include="Project\ReportItems\GroupFooter.cs" />
<Compile Include="Project\ReportItems\BaseImageItem.cs"> <Compile Include="Project\ReportItems\BaseImageItem.cs">
<SubType>Component</SubType> <SubType>Component</SubType>
</Compile> </Compile>
@ -170,7 +170,7 @@
<Compile Include="Project\ReportItems\ErrorItem.cs"> <Compile Include="Project\ReportItems\ErrorItem.cs">
<SubType>Component</SubType> <SubType>Component</SubType>
</Compile> </Compile>
<Compile Include="Project\ReportItems\BaseGroupedRow.cs" /> <Compile Include="Project\ReportItems\GroupHeader.cs" />
<Compile Include="Project\ReportItems\RectangleItemTypeProvider.cs" /> <Compile Include="Project\ReportItems\RectangleItemTypeProvider.cs" />
<Compile Include="Project\ReportManagers\BaseManager.cs" /> <Compile Include="Project\ReportManagers\BaseManager.cs" />
<Compile Include="Project\ReportManagers\StandartPreviewManager.cs" /> <Compile Include="Project\ReportManagers\StandartPreviewManager.cs" />

44
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/BaseGroupItem.cs

@ -1,44 +0,0 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Drawing;
using System.Windows.Forms;
using System.Windows.Forms.Design;
using ICSharpCode.Reports.Core;
using ICSharpCode.Reports.Core.BaseClasses.Printing;
namespace ICSharpCode.Reports.Addin
{
/// <summary>
/// Description of BaseGroupItem.
/// </summary>
///
[Designer(typeof(ICSharpCode.Reports.Addin.Designer.GroupHeaderDesigner))]
public class BaseGroupItem:BaseDataItem
{
public BaseGroupItem()
{
}
[System.ComponentModel.EditorBrowsableAttribute()]
protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
{
// if (Text.CompareTo(ColumnName) != 0 ) {
// Text = ColumnName;
// }
base.OnPaint(e);
this.Draw(e.Graphics);
}
public override void Draw(Graphics graphics)
{
base.Draw (graphics);
}
}
}

22
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/GroupFooter.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
{
/// <summary>
/// Description of BaseGroupFooter.
/// </summary>
public class GroupFooter:GroupHeader
{
public GroupFooter()
{
}
}
}

7
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/BaseGroupedRow.cs → src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportItems/GroupHeader.cs

@ -15,13 +15,14 @@ namespace ICSharpCode.Reports.Addin
/// Description of GroupedRow. /// Description of GroupedRow.
/// </summary> /// </summary>
[Designer(typeof(ICSharpCode.Reports.Addin.Designer.GroupedRowDesigner))] [Designer(typeof(ICSharpCode.Reports.Addin.Designer.GroupedRowDesigner))]
public class BaseGroupedRow:BaseRowItem public class GroupHeader:BaseRowItem
{ {
public BaseGroupedRow() public GroupHeader()
{ {
TypeDescriptor.AddProvider(new GroupedRowTypeProvider(), typeof(BaseGroupedRow)); TypeDescriptor.AddProvider(new GroupedRowTypeProvider(), typeof(GroupHeader));
} }
[Category("Behavior")] [Category("Behavior")]
public bool PageBreakOnGroupChange {get;set;} public bool PageBreakOnGroupChange {get;set;}
} }

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

@ -92,9 +92,9 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
#region HeaderColumns #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(); ICSharpCode.Reports.Core.BaseRowItem row = new ICSharpCode.Reports.Core.BaseRowItem();
AdjustContainer(parent,row); AdjustContainer(parent,row);
@ -136,15 +136,15 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
#endregion #endregion
protected ReportItemCollection AddItemsToContainer (ReportItemCollection items) protected ReportItemCollection AddItemsToContainer ()
{ {
int locationX = GlobalValues.ControlMargins.Left; int locationX = GlobalValues.ControlMargins.Left;
var minCtrlWidth = CalculateControlWidth(ParentItem,items); var minCtrlWidth = CalculateControlWidth(Container,ReportItems);
var col = new ReportItemCollection(); var col = new ReportItemCollection();
foreach (var ir in items) { foreach (var ir in ReportItems) {
ir.Location = new Point(locationX,GlobalValues.ControlMargins.Top); ir.Location = new Point(locationX,GlobalValues.ControlMargins.Top);
col.Add(ir); col.Add(ir);
locationX += minCtrlWidth; locationX += minCtrlWidth;
@ -155,13 +155,13 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
protected static int CalculateControlWidth(ISimpleContainer row, ReportItemCollection colDetail) protected static int CalculateControlWidth(ISimpleContainer row, ReportItemCollection colDetail)
{ {
return row.Size.Width / colDetail.Count; return row.Size.Width / colDetail.Count;
} }
#region Grouping #region Grouping
protected ICSharpCode.Reports.Core.BaseGroupedRow CreateGroupHeader(Point headerLocation) protected ICSharpCode.Reports.Core.GroupHeader CreateGroupHeader(Point headerLocation)
{ {
ICSharpCode.Reports.Core.BaseDataItem dataItem = new ICSharpCode.Reports.Core.BaseDataItem(); ICSharpCode.Reports.Core.BaseDataItem dataItem = new ICSharpCode.Reports.Core.BaseDataItem();
@ -172,19 +172,37 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
dataItem.Size = new Size (150,20); dataItem.Size = new Size (150,20);
dataItem.Text = ReportModel.ReportSettings.GroupColumnsCollection[0].ColumnName; dataItem.Text = ReportModel.ReportSettings.GroupColumnsCollection[0].ColumnName;
ICSharpCode.Reports.Core.BaseGroupedRow groupHeader = new ICSharpCode.Reports.Core.BaseGroupedRow(); ICSharpCode.Reports.Core.GroupHeader groupHeader = new ICSharpCode.Reports.Core.GroupHeader();
groupHeader.Location = headerLocation; groupHeader.Location = headerLocation;
groupHeader.Size = new Size (300,dataItem.Size.Height + GlobalValues.ControlMargins.Top + GlobalValues.ControlMargins.Bottom); groupHeader.Size = new Size (300,dataItem.Size.Height + GlobalValues.ControlMargins.Top + GlobalValues.ControlMargins.Bottom);
groupHeader.Items.Add(dataItem); groupHeader.Items.Add(dataItem);
return groupHeader; 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);
return groupFooter;
}
protected void ConfigureDetails (Point detailLocation,Size detailSize)
{
Container.Location = detailLocation;
Container.Size = detailSize;
}
#endregion #endregion
protected ReportModel ReportModel {get; private set;} protected ReportModel ReportModel {get; private set;}
protected ISimpleContainer ParentItem {get;set;} protected ISimpleContainer Container {get;set;}
protected ReportItemCollection ReportItems {get;set;}
} }
} }

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

@ -15,15 +15,12 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
public class ListLayout : AbstractLayout public class ListLayout : AbstractLayout
{ {
ReportItemCollection reportItems;
public ListLayout(ReportModel reportModel,ReportItemCollection reportItemCollection):base(reportModel) public ListLayout(ReportModel reportModel,ReportItemCollection reportItemCollection):base(reportModel)
{ {
this.reportItems = reportItemCollection; base.ReportItems = reportItemCollection;
ICSharpCode.Reports.Core.BaseRowItem row = new ICSharpCode.Reports.Core.BaseRowItem(); ICSharpCode.Reports.Core.BaseRowItem row = new ICSharpCode.Reports.Core.BaseRowItem();
AdjustContainer(base.ReportModel.DetailSection,row); AdjustContainer(base.ReportModel.DetailSection,row);
base.ParentItem = row; base.Container = row;
} }
@ -33,9 +30,9 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
public override void CreatePageHeader() public override void CreatePageHeader()
{ {
base.CreatePageHeader(); base.CreatePageHeader();
ICSharpCode.Reports.Core.BaseRowItem row = CreateRowWithTextColumns(base.ReportModel.PageHeader, ICSharpCode.Reports.Core.BaseRowItem row = CreateRowWithTextColumns(base.ReportModel.PageHeader);
this.reportItems);
AdjustContainer(ParentItem,row); AdjustContainer(Container,row);
base.ReportModel.PageHeader.Items.Add(row); base.ReportModel.PageHeader.Items.Add(row);
} }
@ -45,23 +42,43 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
if (section == null) { if (section == null) {
throw new ArgumentNullException("section"); throw new ArgumentNullException("section");
} }
Size detailSize = Size.Empty;
Size itemSize = Size.Empty;
Point rowLoction = Point.Empty;
if (base.ReportModel.ReportSettings.GroupColumnsCollection.Count > 0) if (base.ReportModel.ReportSettings.GroupColumnsCollection.Count > 0)
{ {
var groupheader = base.CreateGroupHeader(new Point (GlobalValues.ControlMargins.Left,GlobalValues.ControlMargins.Top)); var groupheader = base.CreateGroupHeader(new Point (GlobalValues.ControlMargins.Left,GlobalValues.ControlMargins.Top));
base.ReportModel.DetailSection.Items.Add(groupheader); base.ReportModel.DetailSection.Items.Add(groupheader);
ParentItem.Location = new Point(ParentItem.Location.X,50); // Detail
ParentItem.Size = new Size(ParentItem.Size.Width,40); itemSize = CreateDetail();
section.Size = new Size(section.Size.Width,90); detailSize = new Size(Container.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);
rowLoction = new Point (Container.Location.X,45);
}
else
{
itemSize = CreateDetail();
detailSize = new Size(Container.Size.Width,itemSize.Height + GlobalValues.ControlMargins.Top + GlobalValues.ControlMargins.Bottom);
section.Size = new Size(section.Size.Width,Container.Size.Height + GlobalValues.ControlMargins.Top + GlobalValues.ControlMargins.Bottom);
rowLoction = new Point(Container.Location.X,GlobalValues.ControlMargins.Top);
} }
base.ConfigureDetails (rowLoction,detailSize);
section.Items.Add(Container as BaseReportItem);
}
var items = base.AddItemsToContainer(this.reportItems); Size CreateDetail()
ParentItem.Items.AddRange(items); {
ParentItem.Size = new Size(ParentItem.Size.Width,items[0].Size.Height + GlobalValues.ControlMargins.Top + GlobalValues.ControlMargins.Bottom); var items = base.AddItemsToContainer();
section.Items.Add(ParentItem as BaseReportItem); Container.Items.AddRange(items);
return items[0].Size;
} }
#endregion #endregion

60
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 public class TableLayout: AbstractLayout
{ {
ReportItemCollection reportItems;
public TableLayout(ReportModel reportModel,ReportItemCollection reportItemCollection):base(reportModel) 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; System.Drawing.Printing.Margins margin = GlobalValues.ControlMargins;
ICSharpCode.Reports.Core.BaseTableItem table = new ICSharpCode.Reports.Core.BaseTableItem(); ICSharpCode.Reports.Core.BaseTableItem table = new ICSharpCode.Reports.Core.BaseTableItem();
ICSharpCode.Reports.Core.BaseRowItem detailRow = new ICSharpCode.Reports.Core.BaseRowItem();
table.Name = "Table1"; table.Name = "Table1";
base.Container = table;
AdjustContainer(base.ReportModel.DetailSection,table); AdjustContainer(base.ReportModel.DetailSection,table);
base.ReportModel.DetailSection.Items.Add(table); base.ReportModel.DetailSection.Items.Add(table);
base.ParentItem = table; ICSharpCode.Reports.Core.BaseRowItem headerRow = CreateRowWithTextColumns(Container);
Container.Items.Add (headerRow);
ICSharpCode.Reports.Core.BaseRowItem headerRow = CreateRowWithTextColumns(ParentItem, this.reportItems);
ParentItem.Items.Add (headerRow);
Point insertLocation = new Point (margin.Left,headerRow.Location.Y + headerRow.Size.Height + margin.Bottom + margin.Top); 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); var groupHeader = base.CreateGroupHeader(insertLocation);
ParentItem.Items.Add(groupHeader); Container.Items.Add(groupHeader);
insertLocation = new Point(margin.Left,insertLocation.Y + groupHeader.Size.Height + margin.Bottom + margin.Top); insertLocation = new Point(margin.Left,insertLocation.Y + groupHeader.Size.Height + margin.Bottom + margin.Top);
//Detail
CreateDetail(detailRow,insertLocation);
Container.Items.Add (detailRow);
// GroupFooter
var groupFooter = base.CreateFooter(new Point(margin.Left,130));
Container.Items.Add(groupFooter);
}
else
{
CreateDetail(detailRow,insertLocation);
Container.Items.Add (detailRow);
} }
//Insert details allways CalculateContainerSize();
section.Size = new Size (section.Size.Width,Container.Size.Height + margin.Top + margin.Bottom);
}
ICSharpCode.Reports.Core.BaseRowItem detailRow = new ICSharpCode.Reports.Core.BaseRowItem();
AdjustContainer (ParentItem,detailRow);
void CreateDetail (ICSharpCode.Reports.Core.BaseRowItem detailRow,Point insertLocation)
{
AdjustContainer (Container,detailRow);
detailRow.Location = insertLocation; detailRow.Location = insertLocation;
detailRow.Size = new Size(detailRow.Size.Width,30); detailRow.Size = new Size(detailRow.Size.Width,30);
int defX = AbstractLayout.CalculateControlWidth(detailRow,ReportItems);
int defX = AbstractLayout.CalculateControlWidth(detailRow,reportItems); int startX = GlobalValues.ControlMargins.Left;
int startX = margin.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; startX += defX;
ir.Location = np; ir.Location = np;
ir.Parent = detailRow; ir.Parent = detailRow;
detailRow.Items.Add(ir); 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; int h = GlobalValues.ControlMargins.Top;
foreach (ICSharpCode.Reports.Core.BaseReportItem item in container.Items) foreach (ICSharpCode.Reports.Core.BaseReportItem item in Container.Items)
{ {
h = h + item.Size.Height + GlobalValues.ControlMargins.Bottom; h = h + item.Size.Height + GlobalValues.ControlMargins.Bottom;
} }
h = h + 3*GlobalValues.ControlMargins.Bottom; h = h + 3*GlobalValues.ControlMargins.Bottom;
Container.Size = new Size (Container.Size.Width,h);
return new Size (container.Size.Width,h);
} }
} }
} }

9
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/WizardPanels/PushModelPanel.cs

@ -9,7 +9,6 @@ using System.Windows.Forms;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.Reports.Core; using ICSharpCode.Reports.Core;
using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Gui;
namespace ICSharpCode.Reports.Addin.ReportWizard namespace ICSharpCode.Reports.Addin.ReportWizard
{ {
@ -52,14 +51,16 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
fdiag.DefaultExt = GlobalValues.XsdExtension; fdiag.DefaultExt = GlobalValues.XsdExtension;
fdiag.Filter = GlobalValues.XsdFileFilter; fdiag.Filter = GlobalValues.XsdFileFilter;
fdiag.Multiselect = false; fdiag.Multiselect = false;
if (fdiag.ShowDialog() == DialogResult.OK) { if (fdiag.ShowDialog() == DialogResult.OK)
{
string fileName = fdiag.FileName; string fileName = fdiag.FileName;
this.txtPath.Text = fileName; this.txtPath.Text = fileName;
FillDataGrid(fileName); FillDataGrid(fileName);
base.EnableNext = true;
base.EnableFinish= true;
} }
} }
base.EnableNext = true;
base.EnableFinish= true;
} }

18
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"); tb.DisplayName = ResourceService.GetString("SharpReport.Toolbar.DataRow");
sideTab.Items.Add(new SideTabItemDesigner(tb)); sideTab.Items.Add(new SideTabItemDesigner(tb));
/*
//Group //GroupHeader
tb = new ToolboxItem(typeof(ICSharpCode.Reports.Addin.BaseGroupItem)); tb = new ToolboxItem(typeof(ICSharpCode.Reports.Addin.GroupHeader));
tb.Bitmap = WinFormsResourceService.GetBitmap("Icons.16x16.SharpQuery.Table"); tb.Bitmap = WinFormsResourceService.GetBitmap("Icons.16x16.SharpQuery.Table");
tb.DisplayName = "SimpleGroupItem"; tb.DisplayName = "GroupHeader";
sideTab.Items.Add(new SideTabItemDesigner(tb)); sideTab.Items.Add(new SideTabItemDesigner(tb));
*/
//GroupHeader
tb = new ToolboxItem(typeof(ICSharpCode.Reports.Addin.BaseGroupedRow)); //GroupFooter
tb = new ToolboxItem(typeof(ICSharpCode.Reports.Addin.GroupFooter));
tb.Bitmap = WinFormsResourceService.GetBitmap("Icons.16x16.SharpQuery.Table"); tb.Bitmap = WinFormsResourceService.GetBitmap("Icons.16x16.SharpQuery.Table");
tb.DisplayName = "GroupHeaderRow"; tb.DisplayName = "GroupFooter";
sideTab.Items.Add(new SideTabItemDesigner(tb)); sideTab.Items.Add(new SideTabItemDesigner(tb));
//BaseTable //BaseTable
tb.Bitmap = WinFormsResourceService.GetBitmap("Icons.16x16.SharpQuery.Table"); tb.Bitmap = WinFormsResourceService.GetBitmap("Icons.16x16.SharpQuery.Table");
tb = new ToolboxItem(typeof(ICSharpCode.Reports.Addin.BaseTableItem)); tb = new ToolboxItem(typeof(ICSharpCode.Reports.Addin.BaseTableItem));

2
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Test/ICSharpCode.Reports.Addin.Test.csproj

@ -69,8 +69,8 @@
<Compile Include="Wizard\Generators\GenerateListWithGroupFixture.cs" /> <Compile Include="Wizard\Generators\GenerateListWithGroupFixture.cs" />
<Compile Include="Wizard\Generators\GeneratePlainReportFixture_2.cs" /> <Compile Include="Wizard\Generators\GeneratePlainReportFixture_2.cs" />
<Compile Include="Wizard\Generators\GenerateTableReportFixture.cs" /> <Compile Include="Wizard\Generators\GenerateTableReportFixture.cs" />
<Compile Include="Wizard\Generators\GenerateTableWithGrouping.cs" />
<Compile Include="Wizard\Generators\GeneratorFactoryFixture.cs" /> <Compile Include="Wizard\Generators\GeneratorFactoryFixture.cs" />
<Compile Include="Wizard\Generators\GenertaeTableWithgroupFixture.cs" />
<Compile Include="Wizard\Generators\ReportGenerationHelper.cs" /> <Compile Include="Wizard\Generators\ReportGenerationHelper.cs" />
<Compile Include="Wizard\ReportStructureFixture.cs" /> <Compile Include="Wizard\ReportStructureFixture.cs" />
</ItemGroup> </ItemGroup>

100
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Test/Wizard/Generators/GenerateListWithGroupFixture.cs

@ -3,6 +3,9 @@
using System; using System;
using System.ComponentModel; using System.ComponentModel;
using System.Collections.ObjectModel;
using System.Linq;
using ICSharpCode.Reports.Addin.ReportWizard; using ICSharpCode.Reports.Addin.ReportWizard;
using ICSharpCode.Reports.Core; using ICSharpCode.Reports.Core;
using NUnit.Framework; using NUnit.Framework;
@ -21,68 +24,45 @@ namespace ICSharpCode.Reports.Addin.Test.Wizard.Generators
[Test] [Test]
public void PageDetail_First_Item_Should_GroupedRow() public void PageDetail_Should_Contains_GroupedHeader()
{ {
ICSharpCode.Reports.Core.BaseSection s = this.reportModel.DetailSection; ICSharpCode.Reports.Core.BaseSection section = this.reportModel.DetailSection;
BaseReportItem item = s.Items[0];
Assert.That(item,Is.InstanceOf(typeof(ICSharpCode.Reports.Core.BaseGroupedRow)));
}
[Test] //GroupHeader
public void GroupHeader_Should_Contain_DataItem() var c = new Collection<ICSharpCode.Reports.Core.GroupHeader>(section.Items.OfType<ICSharpCode.Reports.Core.GroupHeader>().ToList());
{ Assert.That(c.Count,Is.GreaterThanOrEqualTo(1));
ICSharpCode.Reports.Core.BaseSection s = this.reportModel.DetailSection;
ICSharpCode.Reports.Core.BaseGroupedRow groupedRow = (ICSharpCode.Reports.Core.BaseGroupedRow)s.Items[0];
var item = groupedRow.Items[0];
Assert.That(item,Is.InstanceOf(typeof(ICSharpCode.Reports.Core.BaseDataItem)));
} }
[Test] [Test]
public void PageDetail_Second_Item_Should_Row() public void Section_Should_Contain_DataRow()
{ {
ICSharpCode.Reports.Core.BaseSection s = this.reportModel.DetailSection; ICSharpCode.Reports.Core.BaseSection section = this.reportModel.DetailSection;
BaseReportItem item = s.Items[1]; //DatatRow
Assert.That(item,Is.InstanceOf(typeof(ICSharpCode.Reports.Core.BaseRowItem))); var c = new Collection<ICSharpCode.Reports.Core.BaseRowItem>(section.Items.OfType<ICSharpCode.Reports.Core.BaseRowItem>().ToList());
Assert.That(c.Count,Is.GreaterThanOrEqualTo(1));
} }
[Test] [Test]
public void DataRow_Should_Contain_DataItem() public void DataRow_Should_Contain_GroupFooter()
{ {
ICSharpCode.Reports.Core.BaseSection s = this.reportModel.DetailSection; ICSharpCode.Reports.Core.BaseSection section = this.reportModel.DetailSection;
ICSharpCode.Reports.Core.BaseRowItem dataRow = (ICSharpCode.Reports.Core.BaseRowItem)s.Items[1];
var item = dataRow.Items[0];
Assert.That(item,Is.InstanceOf(typeof(ICSharpCode.Reports.Core.BaseDataItem)));
}
//GroupFooter
[Test] var c = new Collection<ICSharpCode.Reports.Core.GroupFooter>(section.Items.OfType<ICSharpCode.Reports.Core.GroupFooter>().ToList());
public void PageDetail_Should_Contain_Two_items() Assert.That(c.Count,Is.GreaterThanOrEqualTo(1));
{
ICSharpCode.Reports.Core.BaseSection s = this.reportModel.DetailSection;
Assert.That(s.Items.Count.Equals(2));
} }
[Test] [Test]
public void PageDetail_First_Item_Should_Contain_GroupedRow() public void PageDetail_Should_Contain_Three_Items()
{ {
ICSharpCode.Reports.Core.BaseSection s = this.reportModel.DetailSection; ICSharpCode.Reports.Core.BaseSection section = this.reportModel.DetailSection;
Assert.That(s.Items.Count.Equals(2)); Assert.That(section.Items.Count.Equals(3));
} }
[Test]
public void PageDetail_Row_Should_Contain_DataItems()
{
ICSharpCode.Reports.Core.BaseSection s = this.reportModel.DetailSection;
ICSharpCode.Reports.Core.BaseRowItem rowItem = (ICSharpCode.Reports.Core.BaseRowItem)s.Items[0];
Assert.IsTrue(rowItem.Items.Count > 0);
BaseReportItem item = rowItem.Items[0];
Assert.That(item,Is.InstanceOf(typeof(ICSharpCode.Reports.Core.BaseDataItem)));
}
#region Setup/Teardown #region Setup/Teardown
@ -99,45 +79,7 @@ namespace ICSharpCode.Reports.Addin.Test.Wizard.Generators
{ {
// TODO: Add tear down code. // TODO: Add tear down code.
} }
/*
private static ReportModel CreateModel (string reportName)
{
ReportStructure structure = CreateReportStructure(reportName);
AvailableFieldsCollection abstractColumns = new AvailableFieldsCollection();
AbstractColumn a1 = new AbstractColumn("Field1",typeof(System.String));
structure.AvailableFieldsCollection.Add(a1);
ICSharpCode.Reports.Core.BaseDataItem bri = new ICSharpCode.Reports.Core.BaseDataItem();
bri.Name ="Field1";
structure.ReportItemCollection.Add(bri);
structure.Grouping = "group";
ReportModel m = structure.CreateAndFillReportModel();
ICSharpCode.Core.Properties customizer = new ICSharpCode.Core.Properties();
customizer.Set("Generator", structure);
customizer.Set("ReportLayout",GlobalEnums.ReportLayout.ListLayout);
IReportGenerator generator = new GeneratePushDataReport(m,customizer);
generator.GenerateReport();
ReportLoader rl = new ReportLoader();
object root = rl.Load(generator.XmlReport.DocumentElement);
ReportModel model = root as ReportModel;
if (model != null) {
model.ReportSettings.FileName = GlobalValues.PlainFileName;
FilePathConverter.AdjustReportName(model);
} else {
throw new InvalidReportModelException();
}
return model;
}
*/
private static ReportStructure CreateReportStructure (string reportName) private static ReportStructure CreateReportStructure (string reportName)
{ {
ReportStructure structure = new ReportStructure(); ReportStructure structure = new ReportStructure();

46
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Test/Wizard/Generators/GenertaeTableWithgroupFixture.cs → src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Test/Wizard/Generators/GenerateTableWithGrouping.cs

@ -8,6 +8,8 @@
*/ */
using System; using System;
using System.Collections.ObjectModel;
using System.Linq;
using ICSharpCode.Reports.Addin.ReportWizard; using ICSharpCode.Reports.Addin.ReportWizard;
using ICSharpCode.Reports.Core; using ICSharpCode.Reports.Core;
using NUnit.Framework; using NUnit.Framework;
@ -23,40 +25,48 @@ namespace ICSharpCode.Reports.Addin.Test.Wizard.Generators
[Test] [Test]
public void PageDetail_First_Item_Should_Table() public void Table_Should_Contains_GroupedHeader()
{ {
ICSharpCode.Reports.Core.BaseSection s = this.reportModel.DetailSection; ICSharpCode.Reports.Core.BaseTableItem table = CreateContainer();
var item = s.Items[0]; //GroupHeader
Assert.That(item,Is.InstanceOf(typeof(ICSharpCode.Reports.Core.BaseTableItem))); var c = new Collection<ICSharpCode.Reports.Core.GroupHeader>(table.Items.OfType<ICSharpCode.Reports.Core.GroupHeader>().ToList());
Assert.That(c.Count,Is.GreaterThanOrEqualTo(1));
} }
[Test] [Test]
public void Table_Should_Contain_Three_Rows() public void Table_Should_Contain_DataRow()
{ {
ICSharpCode.Reports.Core.BaseSection s = this.reportModel.DetailSection; ICSharpCode.Reports.Core.BaseTableItem table = CreateContainer();
ICSharpCode.Reports.Core.BaseTableItem table = s.Items[0] as ICSharpCode.Reports.Core.BaseTableItem; //DataRow
Assert.That(table.Items.Count,Is.GreaterThanOrEqualTo(3)); var c = new Collection<ICSharpCode.Reports.Core.BaseRowItem>(table.Items.OfType<ICSharpCode.Reports.Core.BaseRowItem>().ToList());
Assert.That(c.Count,Is.GreaterThanOrEqualTo(1));
} }
[Test] [Test]
public void Table_FirstItem_Should_Row () public void Table_Should_Contain_GroupFooter()
{ {
ICSharpCode.Reports.Core.BaseSection s = this.reportModel.DetailSection; ICSharpCode.Reports.Core.BaseTableItem table = CreateContainer();
ICSharpCode.Reports.Core.BaseTableItem table = s.Items[0] as ICSharpCode.Reports.Core.BaseTableItem; //GroupFooter
var row = table.Items[0]; var c = new Collection<ICSharpCode.Reports.Core.GroupFooter>(table.Items.OfType<ICSharpCode.Reports.Core.GroupFooter>().ToList());
Assert.That(row,Is.InstanceOf(typeof(ICSharpCode.Reports.Core.BaseRowItem))); Assert.That(c.Count,Is.GreaterThanOrEqualTo(1));
} }
[Test] [Test]
public void Table_SecondItem_Should_GroupRow () public void PageDetail_Should_Contain_Four_Items()
{ {
ICSharpCode.Reports.Core.BaseSection s = this.reportModel.DetailSection; ICSharpCode.Reports.Core.BaseTableItem table = CreateContainer();
ICSharpCode.Reports.Core.BaseTableItem table = s.Items[0] as ICSharpCode.Reports.Core.BaseTableItem; Assert.That(table.Items.Count.Equals(4));
var row = table.Items[1]; }
Assert.That(row,Is.InstanceOf(typeof(ICSharpCode.Reports.Core.BaseGroupedRow)));
private ICSharpCode.Reports.Core.BaseTableItem CreateContainer ()
{
ICSharpCode.Reports.Core.BaseSection section = this.reportModel.DetailSection;
ICSharpCode.Reports.Core.BaseTableItem table = section.Items[0] as ICSharpCode.Reports.Core.BaseTableItem;
return table;
} }
#region setup / TearDown #region setup / TearDown

6
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj

@ -89,8 +89,8 @@
<Compile Include="Project\BaseClasses\SinglePage.cs" /> <Compile Include="Project\BaseClasses\SinglePage.cs" />
<Compile Include="Project\BaseClasses\SectionBounds.cs" /> <Compile Include="Project\BaseClasses\SectionBounds.cs" />
<Compile Include="Project\BaseClasses\SortColumn.cs" /> <Compile Include="Project\BaseClasses\SortColumn.cs" />
<Compile Include="Project\BaseItems\BaseGroupedRow.cs" /> <Compile Include="Project\BaseItems\GroupHeader.cs" />
<Compile Include="Project\BaseItems\BaseGroupItem.cs" /> <Compile Include="Project\BaseItems\GroupFooter.cs" />
<Compile Include="Project\BaseItems\BaseTextItem.cs" /> <Compile Include="Project\BaseItems\BaseTextItem.cs" />
<Compile Include="Project\BaseItems\BaseGraphicItem.cs" /> <Compile Include="Project\BaseItems\BaseGraphicItem.cs" />
<Compile Include="Project\BaseItems\BaseReportItem.cs" /> <Compile Include="Project\BaseItems\BaseReportItem.cs" />
@ -124,10 +124,8 @@
</Compile> </Compile>
<Compile Include="Project\Dialogs\DefaultTextEditor.cs" /> <Compile Include="Project\Dialogs\DefaultTextEditor.cs" />
<Compile Include="Project\Dialogs\SortingCollectionEditor.cs" /> <Compile Include="Project\Dialogs\SortingCollectionEditor.cs" />
<Compile Include="Project\Events\GroupChangedEventArgs.cs" />
<Compile Include="Project\Events\NewPageEventArgs.cs" /> <Compile Include="Project\Events\NewPageEventArgs.cs" />
<Compile Include="Project\Events\ReportPageEventArgs.cs" /> <Compile Include="Project\Events\ReportPageEventArgs.cs" />
<Compile Include="Project\Events\ReportParametersEventArgs.cs" />
<Compile Include="Project\Exceptions\FieldNotFoundException.cs" /> <Compile Include="Project\Exceptions\FieldNotFoundException.cs" />
<Compile Include="Project\Exceptions\GroupLevelException.cs" /> <Compile Include="Project\Exceptions\GroupLevelException.cs" />
<Compile Include="Project\Exceptions\IllegalFileFormat.cs" /> <Compile Include="Project\Exceptions\IllegalFileFormat.cs" />

22
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/Layouter.cs

@ -33,6 +33,7 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing
return Rectangle.Empty; return Rectangle.Empty;
} }
Console.WriteLine("\tlayouter for container <{0}>",container.ToString());
Rectangle desiredContainerRectangle = new Rectangle (container.Location,container.Size); Rectangle desiredContainerRectangle = new Rectangle (container.Location,container.Size);
@ -40,11 +41,24 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing
if (canGrowShrinkCollection.Count() > 0 ) { if (canGrowShrinkCollection.Count() > 0 ) {
Rectangle surroundingRec = FindSurroundingRectangle(graphics,canGrowShrinkCollection); Rectangle surroundingRec = FindSurroundingRectangle(graphics,canGrowShrinkCollection);
// desiredContainerRectangle = new Rectangle(container.Location.X,
// container.Location.Y,
// container.Size.Width,
// surroundingRec.Size.Height + GlobalValues.ControlMargins.Top + GlobalValues.ControlMargins.Bottom);
//
desiredContainerRectangle = new Rectangle(container.Location.X, desiredContainerRectangle = new Rectangle(container.Location.X,
container.Location.Y, container.Location.Y,
container.Size.Width, container.Size.Width,
surroundingRec.Size.Height + GlobalValues.ControlMargins.Top + GlobalValues.ControlMargins.Bottom); surroundingRec.Size.Height);
// var r1 = new Rectangle(container.Location.X,
// container.Location.Y,
// container.Size.Width,
// surroundingRec.Size.Height);
//
// Console.WriteLine("Diff {0} - {1} dif {2}",desiredContainerRectangle,r1,desiredContainerRectangle.Height - r1.Height);
} }
Console.WriteLine("\tContainer : {0} - DesiredContainerRectangle {1} ",container.Size,desiredContainerRectangle.Size);
return desiredContainerRectangle; return desiredContainerRectangle;
} }
@ -58,7 +72,7 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing
throw new ArgumentNullException("section"); throw new ArgumentNullException("section");
} }
Console.WriteLine("layouter for {0}",section.Name); Console.WriteLine("\tlayouter for section <{0}>",section.Name);
IEnumerable<BaseReportItem> canGrowShrinkCollection = from bt in section.Items where bt.CanGrow == true select bt; IEnumerable<BaseReportItem> canGrowShrinkCollection = from bt in section.Items where bt.CanGrow == true select bt;
@ -72,12 +86,14 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing
Rectangle surroundingRec = FindSurroundingRectangle(graphics,canGrowShrinkCollection); Rectangle surroundingRec = FindSurroundingRectangle(graphics,canGrowShrinkCollection);
if (surroundingRec.Height > desiredSectionRectangle .Height) { if (surroundingRec.Height > desiredSectionRectangle .Height) {
desiredSectionRectangle = new Rectangle(section.Location.X, desiredSectionRectangle = new Rectangle(section.Location.X,
section .Location.Y, section .Location.Y,
section .Size.Width, section .Size.Width,
surroundingRec.Size.Height + GlobalValues.ControlMargins.Top + GlobalValues.ControlMargins.Bottom ); surroundingRec.Size.Height);
} }
} }
Console.WriteLine("\tSection : {0} - DesiredContainerRectangle {1} ",section.Size,desiredSectionRectangle.Size);
return desiredSectionRectangle; return desiredSectionRectangle;
} }

6
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/StandardPrinter.cs

@ -259,9 +259,9 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing
foreach (BaseExportColumn element in row) { foreach (BaseExportColumn element in row) {
ExportText textItem = element as ExportText; ExportText textItem = element as ExportText;
if (textItem != null) { if (textItem != null) {
if (textItem.Text.StartsWith("=")) { // if (textItem.Text.StartsWith("=",StringComparison.InvariantCulture)) {
Console.WriteLine(textItem.Text); //// Console.WriteLine(textItem.Text);
} // }
textItem.Text = evaluator.Evaluate(textItem.Text); textItem.Text = evaluator.Evaluate(textItem.Text);
} }
} }

17
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/SectionBounds.cs

@ -38,9 +38,9 @@ namespace ICSharpCode.Reports.Core.BaseClasses
bool firstPage; bool firstPage;
bool landscape; bool landscape;
// int gap = 1;
Rectangle printableArea; Rectangle printableArea;
#region Constructor #region Constructor
@ -103,13 +103,12 @@ namespace ICSharpCode.Reports.Core.BaseClasses
} }
//Test
public void MeasurePageFooter (IReportItem section) public void MeasurePageFooter (IReportItem section)
{ {
if (section == null) { if (section == null) {
throw new ArgumentNullException("section"); throw new ArgumentNullException("section");
} }
this.pageFooterRectangle = new Rectangle(this.printableArea.Location.X, this.pageFooterRectangle = new Rectangle(this.printableArea.Location.X,
this.marginBounds.Bottom - section.Size.Height, this.marginBounds.Bottom - section.Size.Height,
this.marginBounds.Width, this.marginBounds.Width,
@ -117,6 +116,7 @@ namespace ICSharpCode.Reports.Core.BaseClasses
} }
//Test //Test
public void MeasureReportFooter (IReportItem section) public void MeasureReportFooter (IReportItem section)
{ {
@ -224,17 +224,6 @@ namespace ICSharpCode.Reports.Core.BaseClasses
} }
} }
/// <summary>
/// gap between two Sections
/// </summary>
// public int Gap
// {
// get {
// return gap;
// }
// }
public Rectangle DetailSectionRectangle {get;set;} public Rectangle DetailSectionRectangle {get;set;}

5
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/SinglePage.cs

@ -37,15 +37,10 @@ namespace ICSharpCode.Reports.Core.BaseClasses
} }
sectionBounds.MeasureReportHeader(reportModel.ReportHeader); sectionBounds.MeasureReportHeader(reportModel.ReportHeader);
//PageHeader
this.sectionBounds.MeasurePageHeader(reportModel.PageHeader); this.sectionBounds.MeasurePageHeader(reportModel.PageHeader);
//PageFooter
this.sectionBounds.MeasurePageFooter(reportModel.PageFooter); this.sectionBounds.MeasurePageFooter(reportModel.PageFooter);
//ReportFooter
this.sectionBounds.MeasureReportFooter(reportModel.ReportFooter); this.sectionBounds.MeasureReportFooter(reportModel.ReportFooter);
this.sectionBounds.MeasureDetailArea(); this.sectionBounds.MeasureDetailArea();

17
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseGroupItem.cs

@ -1,17 +0,0 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
namespace ICSharpCode.Reports.Core
{
/// <summary>
/// Description of BaseGroupeItem.
/// </summary>
public class BaseGroupItem:BaseDataItem
{
public BaseGroupItem():base()
{
}
}
}

20
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseSection.cs

@ -19,7 +19,7 @@ namespace ICSharpCode.Reports.Core
public class BaseSection : BaseReportItem,ISimpleContainer public class BaseSection : BaseReportItem,ISimpleContainer
{ {
private bool pageBreakAfter; // private bool pageBreakAfter;
private ReportItemCollection items; private ReportItemCollection items;
public event EventHandler<SectionEventArgs> SectionPrinting; public event EventHandler<SectionEventArgs> SectionPrinting;
@ -120,13 +120,6 @@ namespace ICSharpCode.Reports.Core
public int SectionMargin {get;set;} public int SectionMargin {get;set;}
public override System.Drawing.Point Location
{
get { return base.Location; }
set { base.Location = value; }
}
public ReportItemCollection Items public ReportItemCollection Items
{ {
get { get {
@ -138,16 +131,7 @@ namespace ICSharpCode.Reports.Core
} }
public virtual bool PageBreakAfter public virtual bool PageBreakAfter {get;set;}
{
get {
return pageBreakAfter;
}
set {
pageBreakAfter = value;
}
}
#endregion #endregion

24
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/GroupFooter.cs

@ -0,0 +1,24 @@
/*
* 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
{
/// <summary>
/// Description of BaseGroupeFooter.
/// </summary>
public class GroupFooter:GroupHeader
{
public GroupFooter()
{
}
}
}

4
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseGroupedRow.cs → src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/GroupHeader.cs

@ -8,9 +8,9 @@ namespace ICSharpCode.Reports.Core
/// <summary> /// <summary>
/// Description of BaseGroupeRow. /// Description of BaseGroupeRow.
/// </summary> /// </summary>
public class BaseGroupedRow:BaseRowItem public class GroupHeader:BaseRowItem
{ {
public BaseGroupedRow():base() public GroupHeader():base()
{ {
} }

22
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Collections/Collections.cs

@ -152,8 +152,7 @@ namespace ICSharpCode.Reports.Core{
public bool IsGrouped public bool IsGrouped
{ {
get { get {
return (this[0] is BaseGroupedRow)|| (this[0] is BaseGroupItem) ; return (this[0] is GroupHeader) ;
//return CreateGroupedList().Count > 0;
} }
} }
@ -175,28 +174,9 @@ namespace ICSharpCode.Reports.Core{
} }
private Collection<BaseGroupItem> old_CreateGroupedList ()
{
Collection<BaseGroupItem> inheritedReportItems = null;
foreach (BaseReportItem element in this) {
ISimpleContainer container = element as ISimpleContainer;
if (container == null) {
inheritedReportItems = new Collection<BaseGroupItem>(this.OfType<BaseGroupItem>().ToList());
break;
} else {
inheritedReportItems = new Collection<BaseGroupItem>(container.Items.OfType<BaseGroupItem>().ToList());
break;
}
}
return inheritedReportItems;
}
public ReportItemCollection ExtractGroupedColumns () public ReportItemCollection ExtractGroupedColumns ()
{ {
Collection<BaseDataItem> inheritedReportItems = CreateGroupedList(); Collection<BaseDataItem> inheritedReportItems = CreateGroupedList();
// Collection<BaseGroupItem> inheritedReportItems = CreateGroupedList();
ReportItemCollection r = new ReportItemCollection(); ReportItemCollection r = new ReportItemCollection();
r.AddRange(inheritedReportItems); r.AddRange(inheritedReportItems);
return r; return r;

14
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ChildNavigator.cs

@ -13,7 +13,7 @@ namespace ICSharpCode.Reports.Core
{ {
private IndexList indexList; private IndexList indexList;
private IDataViewStrategy store; private IDataViewStrategy store;
private System.Collections.Generic.List<BaseComparer>.Enumerator genEnumerator; private System.Collections.Generic.List<BaseComparer>.Enumerator enumerator;
public ChildNavigator(IDataViewStrategy dataStore,IndexList indexList) public ChildNavigator(IDataViewStrategy dataStore,IndexList indexList)
{ {
@ -22,8 +22,8 @@ namespace ICSharpCode.Reports.Core
} }
this.store = dataStore; this.store = dataStore;
this.indexList = indexList; this.indexList = indexList;
genEnumerator = this.indexList.GetEnumerator(); enumerator = this.indexList.GetEnumerator();
genEnumerator.MoveNext(); enumerator.MoveNext();
} }
@ -71,7 +71,8 @@ namespace ICSharpCode.Reports.Core
public object Current { public object Current {
get { get {
TableStrategy t = this.store as TableStrategy; TableStrategy t = this.store as TableStrategy;
return t.myCurrent(genEnumerator.Current.ListIndex); // return t.myCurrent(enumerator.Current.ListIndex);
return t.myCurrent(this.indexList[CurrentRow].ListIndex);
} }
} }
@ -125,11 +126,6 @@ namespace ICSharpCode.Reports.Core
} }
public void FillChild(ReportItemCollection collection)
{
throw new NotImplementedException();
}
private IndexList BuildChildList() private IndexList BuildChildList()
{ {
GroupComparer gc = this.indexList[this.indexList.CurrentPosition] as GroupComparer; GroupComparer gc = this.indexList[this.indexList.CurrentPosition] as GroupComparer;

3
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/BaseListStrategy.cs

@ -110,7 +110,7 @@ namespace ICSharpCode.Reports.Core {
} }
compVal = v; compVal = v;
} }
ShowIndexList(IndexList); // ShowIndexList(IndexList);
} }
@ -133,6 +133,7 @@ namespace ICSharpCode.Reports.Core {
protected static void ShowIndexList (IndexList list) protected static void ShowIndexList (IndexList list)
{ {
foreach (BaseComparer element in list) { foreach (BaseComparer element in list) {
string s = String.Format("{0} ",element.ObjectArray[0]); string s = String.Format("{0} ",element.ObjectArray[0]);
GroupComparer gc = element as GroupComparer; GroupComparer gc = element as GroupComparer;

2
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/CollectionStrategy.cs

@ -166,7 +166,7 @@ namespace ICSharpCode.Reports.Core {
base.Group(); base.Group();
IndexList gl = new IndexList("group"); IndexList gl = new IndexList("group");
gl = this.BuildSortIndex (ReportSettings.GroupColumnsCollection); gl = this.BuildSortIndex (ReportSettings.GroupColumnsCollection);
ShowIndexList(gl); // ShowIndexList(gl);
base.BuildGroup(gl); base.BuildGroup(gl);
} }

2
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/TableStrategy.cs

@ -101,7 +101,7 @@ namespace ICSharpCode.Reports.Core
base.Group(); base.Group();
IndexList sortedIndexList = new IndexList("group"); IndexList sortedIndexList = new IndexList("group");
sortedIndexList = this.BuildSortIndex (ReportSettings.GroupColumnsCollection); sortedIndexList = this.BuildSortIndex (ReportSettings.GroupColumnsCollection);
ShowIndexList(sortedIndexList); // ShowIndexList(sortedIndexList);
BuildGroup(sortedIndexList); BuildGroup(sortedIndexList);
} }

30
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Events/GroupChangedEventArgs.cs

@ -1,30 +0,0 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
/// <summary>
///
/// </summary>
/// <remarks>
/// created by - Forstmeier Peter
/// created on - 29.11.2005 16:48:53
/// </remarks>
namespace ICSharpCode.Reports.Core {
/*
public class GroupChangedEventArgs : System.EventArgs {
GroupSeparator groupSeparator;
public GroupChangedEventArgs(GroupSeparator groupSeperator)
{
this.groupSeparator = groupSeperator;
}
public GroupSeparator GroupSeparator {
get {
return groupSeparator;
}
}
}
*/
}

2
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Events/PrintEventArgs.cs

@ -44,7 +44,7 @@ namespace ICSharpCode.Reports.Core {
} }
/// <summary> /// <summary>
/// This Event is fiered after an Item is printed /// This Event is fired after an Item is printed
/// </summary> /// </summary>
public class AfterPrintEventArgs : System.EventArgs { public class AfterPrintEventArgs : System.EventArgs {
PointF locationAfterPrint; PointF locationAfterPrint;

51
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Events/ReportParametersEventArgs.cs

@ -1,51 +0,0 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
namespace ICSharpCode.Reports.Core {
using System;
/// <summary>
/// This Event is fired when SharpReport need Parameters to run a Query
/// as an example, have a look to SharpReportView, there we will use this event
/// </summary>
/// <remarks>
/// created by - Forstmeier Peter
/// created on - 23.06.2005 22:55:10
/// </remarks>
public class ReportParametersEventArgs : System.EventArgs {
ParameterCollection sqlParametersCollection;
string reportName;
public ReportParametersEventArgs () {
}
/// <summary>
/// The ParametersCollection
/// </summary>
public ParameterCollection SqlParametersCollection {
get {
if (this.sqlParametersCollection == null) {
this.sqlParametersCollection = new ParameterCollection();
}
return sqlParametersCollection;
}
}
/// <summary>
/// The ReportName
/// </summary>
public string ReportName {
get {
return reportName;
}
set {
reportName = value;
}
}
}
}

69
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Events/SectionRenderEventArgs.cs

@ -8,38 +8,65 @@ namespace ICSharpCode.Reports.Core {
/// Description of SectionRenderEventArgs. /// Description of SectionRenderEventArgs.
/// </summary> /// </summary>
public class GroupFooterEventArgs: EventArgs
{
public GroupFooterEventArgs (GroupFooter groupFooter)
{
GroupFooter = groupFooter;
}
public GroupFooter GroupFooter {get; private set;}
}
public class GroupHeaderEventArgs: EventArgs
{
public GroupHeaderEventArgs (GroupHeader groupHeader)
{
GroupHeader = groupHeader;
}
public GroupHeader GroupHeader {get; private set;}
}
public class RowRenderEventArgs : EventArgs
{
public RowRenderEventArgs (BaseRowItem row,object rowData)
{
Row = row;
RowData = rowData;
}
public BaseRowItem Row {get; private set;}
public object RowData {get; private set;}
}
public class SectionRenderEventArgs:SectionEventArgs{ public class SectionRenderEventArgs:SectionEventArgs{
private int pageNumber;
private int rowNumber;
private BaseSection currentSection;
public SectionRenderEventArgs(BaseSection section, public SectionRenderEventArgs(BaseSection section,
int pageNumber,int rowNumber, int pageNumber,int rowNumber,
BaseSection currentSection):base(section){ BaseSection currentSection):base(section){
this.pageNumber = pageNumber; this.PageNumber = pageNumber;
this.currentSection = currentSection; this.CurrentSection = currentSection;
this.rowNumber = rowNumber; this.RowNumber = rowNumber;
} }
public int PageNumber { public int PageNumber {get; private set;}
get {
return pageNumber;
}
}
public int RowNumber { public int RowNumber {get; private set;}
get {
return rowNumber;
}
}
public BaseSection CurrentSection { public BaseSection CurrentSection {get; private set;}
get {
return currentSection;
}
}
} }
} }

81
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs

@ -16,12 +16,14 @@ namespace ICSharpCode.Reports.Core.Exporter
public class BasePager:IReportCreator public class BasePager:IReportCreator
{ {
private PagesCollection pages; private PagesCollection pages;
private Graphics graphics;
private readonly object pageLock = new object(); private readonly object pageLock = new object();
private ILayouter layouter;
public event EventHandler<PageCreatedEventArgs> PageCreated; public event EventHandler<PageCreatedEventArgs> PageCreated;
public event EventHandler<SectionRenderEventArgs> SectionRendering; public event EventHandler<SectionRenderEventArgs> SectionRendering;
public event EventHandler<GroupHeaderEventArgs> GroupHeaderRendering;
public event EventHandler<GroupFooterEventArgs> GroupFooterRendering;
public event EventHandler<RowRenderEventArgs> RowRendering;
#region Constructor #region Constructor
@ -34,8 +36,8 @@ namespace ICSharpCode.Reports.Core.Exporter
throw new ArgumentNullException ("layouter"); throw new ArgumentNullException ("layouter");
} }
this.ReportModel = reportModel; this.ReportModel = reportModel;
this.layouter = layouter; this.Layouter = layouter;
this.graphics = CreateGraphicObject.FromSize(this.ReportModel.ReportSettings.PageSize); this.Graphics = CreateGraphicObject.FromSize(this.ReportModel.ReportSettings.PageSize);
} }
#endregion #endregion
@ -94,6 +96,13 @@ namespace ICSharpCode.Reports.Core.Exporter
Point offset = new Point(section.Location.X,section.SectionOffset); Point offset = new Point(section.Location.X,section.SectionOffset);
// Call layouter only once per section
Rectangle desiredRectangle = Layouter.Layout(this.Graphics,section);
Rectangle sectionRectangle = new Rectangle(section.Location,section.Size);
if (!sectionRectangle.Contains(desiredRectangle)) {
section.Size = new Size(section.Size.Width,desiredRectangle.Size.Height + GlobalValues.ControlMargins.Top + GlobalValues.ControlMargins.Bottom);
}
foreach (BaseReportItem item in section.Items) { foreach (BaseReportItem item in section.Items) {
ISimpleContainer container = item as ISimpleContainer; ISimpleContainer container = item as ISimpleContainer;
@ -102,7 +111,7 @@ namespace ICSharpCode.Reports.Core.Exporter
ExportContainer exportContainer = StandardPrinter.ConvertToContainer(container,offset); ExportContainer exportContainer = StandardPrinter.ConvertToContainer(container,offset);
StandardPrinter.AdjustBackColor (container); StandardPrinter.AdjustBackColor (container);
ExporterCollection clist = StandardPrinter.ConvertPlainCollection(container.Items,offset); ExporterCollection clist = StandardPrinter.ConvertPlainCollection(container.Items,offset);
@ -110,14 +119,6 @@ namespace ICSharpCode.Reports.Core.Exporter
list.Add(exportContainer); list.Add(exportContainer);
} else { } else {
Rectangle desiredRectangle = layouter.Layout(this.graphics,section);
Rectangle sectionRectangle = new Rectangle(0,0,section.Size.Width,section.Size.Height);
if (!sectionRectangle.Contains(desiredRectangle)) {
section.Size = new Size(section.Size.Width,desiredRectangle.Size.Height + GlobalValues.ControlMargins.Top + GlobalValues.ControlMargins.Bottom);
}
list = StandardPrinter.ConvertPlainCollection(section.Items,offset); list = StandardPrinter.ConvertPlainCollection(section.Items,offset);
} }
} }
@ -197,8 +198,8 @@ namespace ICSharpCode.Reports.Core.Exporter
private static void EvaluateRecursive (IExpressionEvaluatorFacade evaluatorFassade,ExporterCollection items) private static void EvaluateRecursive (IExpressionEvaluatorFacade evaluatorFassade,ExporterCollection items)
{ {
foreach (BaseExportColumn be in items) { foreach (BaseExportColumn be in items) {
IExportContainer ec = be as IExportContainer; IExportContainer ec = be as IExportContainer;
if (ec != null) if (ec != null)
{ {
@ -207,31 +208,22 @@ namespace ICSharpCode.Reports.Core.Exporter
} }
} }
ExportText et = be as ExportText; ExportText et = be as ExportText;
if (et != null) {
try{
if (et.Text.StartsWith("=Globals!Page")) {
Console.WriteLine ("wxpression : {0}",evaluatorFassade.Evaluate(et.Text));
}
if (et != null) {
if (et.Text.StartsWith("=")) {
et.Text = evaluatorFassade.Evaluate(et.Text); et.Text = evaluatorFassade.Evaluate(et.Text);
} }
catch (UnknownFunctionException ufe)
{
et.Text = GlobalValues.UnkownFunctionMessage(ufe.Message);
}
finally
{
}
} }
} }
} }
#endregion #endregion
#region Event's #region Event's
protected void FireSectionRenderEvent (BaseSection section,int currentRow) protected void FireSectionRenderEvent (BaseSection section,int currentRow)
{ {
SectionRenderEventArgs ea = SectionRenderEventArgs ea =
@ -244,6 +236,24 @@ namespace ICSharpCode.Reports.Core.Exporter
} }
protected void FireGroupHeaderEvent (GroupHeaderEventArgs ghea)
{
EventHelper.Raise<GroupHeaderEventArgs>(GroupHeaderRendering,this,ghea);
}
protected void FireGroupFooterEvent (GroupFooterEventArgs gfea)
{
EventHelper.Raise<GroupFooterEventArgs>(GroupFooterRendering,this,gfea);
}
protected void FireRowRenderEvent (RowRenderEventArgs rrea)
{
EventHelper.Raise<RowRenderEventArgs>(RowRendering,this,rrea);
}
protected void FirePageCreated(ExporterPage page) protected void FirePageCreated(ExporterPage page)
{ {
@ -255,14 +265,9 @@ namespace ICSharpCode.Reports.Core.Exporter
#region Property's #region Property's
protected Graphics Graphics { protected Graphics Graphics {get; private set;}
get { return graphics; }
}
public ILayouter Layouter { public ILayouter Layouter {get; private set;}
get { return layouter; }
}
public IReportModel ReportModel {get;set;} public IReportModel ReportModel {get;set;}
@ -286,14 +291,6 @@ namespace ICSharpCode.Reports.Core.Exporter
get { return SinglePage.SectionBounds; } get { return SinglePage.SectionBounds; }
} }
// protected bool PageFull
// {
// get { return pageFull; }
// set { pageFull = value; }
// }
//
#endregion #endregion
} }
} }

161
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs

@ -22,18 +22,14 @@ namespace ICSharpCode.Reports.Core.Exporter
public class BaseConverter:IBaseConverter public class BaseConverter:IBaseConverter
{ {
private IDataNavigator dataNavigator;
private ExporterPage singlePage;
private SectionBounds sectionBounds;
private Rectangle parentRectangle;
private ILayouter layouter;
private Size saveSize; private Size saveSize;
private IExpressionEvaluatorFacade evaluator;
public event EventHandler <NewPageEventArgs> PageFull; public event EventHandler <NewPageEventArgs> PageFull;
public event EventHandler<SectionRenderEventArgs> SectionRendering; public event EventHandler<SectionRenderEventArgs> SectionRendering;
public event EventHandler<GroupHeaderEventArgs> GroupHeaderRendering;
public event EventHandler<GroupFooterEventArgs> GroupFooterRendering;
public event EventHandler<RowRenderEventArgs> RowRendering;
public BaseConverter(IDataNavigator dataNavigator,ExporterPage singlePage, public BaseConverter(IDataNavigator dataNavigator,ExporterPage singlePage,
ILayouter layouter) ILayouter layouter)
@ -48,11 +44,11 @@ namespace ICSharpCode.Reports.Core.Exporter
if (layouter == null) { if (layouter == null) {
throw new ArgumentNullException("layouter"); throw new ArgumentNullException("layouter");
} }
this.singlePage = singlePage; this.SinglePage = singlePage;
this.dataNavigator = dataNavigator; this.DataNavigator = dataNavigator;
this.sectionBounds = this.singlePage.SectionBounds; SectionBounds = this.SinglePage.SectionBounds;
this.layouter = layouter; this.Layouter = layouter;
this.evaluator = StandardPrinter.CreateEvaluator(this.singlePage,this.dataNavigator); this.Evaluator = StandardPrinter.CreateEvaluator(this.SinglePage,this.DataNavigator);
} }
@ -74,16 +70,46 @@ namespace ICSharpCode.Reports.Core.Exporter
#endregion #endregion
#region Events
protected void FireRowRendering (ISimpleContainer detailRow,IDataNavigator currentNavigator)
{
BaseRowItem row = detailRow as BaseRowItem;
if (row == null) {
throw new ArgumentException("row");
}
Console.WriteLine("\tFireRowRendering");
RowRenderEventArgs rrea = new RowRenderEventArgs(row,currentNavigator.Current);
EventHelper.Raise<RowRenderEventArgs>(RowRendering,this,rrea);
}
protected void FireGroupHeaderRendering (GroupHeader groupHeader)
{
Console.WriteLine("\tFireGroupHeaderRendering");
GroupHeaderEventArgs ghea = new GroupHeaderEventArgs(groupHeader);
EventHelper.Raise<GroupHeaderEventArgs>(GroupHeaderRendering,this,ghea);
}
protected void FireGroupFooterRendering (GroupFooter groupFooter)
{
Console.WriteLine("\tFireGroupFooterRendering");
GroupFooterEventArgs gfea = new GroupFooterEventArgs(groupFooter);
EventHelper.Raise<GroupFooterEventArgs>(GroupFooterRendering,this,gfea);
}
protected void FireSectionRendering (BaseSection section) protected void FireSectionRendering (BaseSection section)
{ {
SectionRenderEventArgs srea = new SectionRenderEventArgs(section, SectionRenderEventArgs srea = new SectionRenderEventArgs(section,
this.SinglePage.PageNumber, this.SinglePage.PageNumber,
this.dataNavigator.CurrentRow, this.DataNavigator.CurrentRow,
section); section);
EventHelper.Raise<SectionRenderEventArgs>(SectionRendering,this,srea); EventHelper.Raise<SectionRenderEventArgs>(SectionRendering,this,srea);
} }
#endregion
protected static ExporterCollection ConvertItems (ISimpleContainer row,Point offset) protected static ExporterCollection ConvertItems (ISimpleContainer row,Point offset)
@ -110,18 +136,44 @@ namespace ICSharpCode.Reports.Core.Exporter
#region Grouping #region Grouping
protected Point ConvertGroupChilds(ExporterCollection mylist, BaseSection section, ISimpleContainer simpleContainer, int defaultLeftPos, Point currentPosition) protected void ConvertGroupFooter (BaseSection section,ISimpleContainer container,ExporterCollection exporterCollection)
{
var footers = BaseConverter.FindGroupFooter(container);
if (footers.Count > 0) {
Size rowSize = footers[0].Size;
CurrentPosition = ConvertStandardRow(exporterCollection,section,(ISimpleContainer)footers[0]);
FireGroupFooterRendering(footers[0]);
footers[0].Size = rowSize;
}
}
protected Point ConvertGroupChilds(ExporterCollection mylist, BaseSection section,
ISimpleContainer simpleContainer)
{ {
PrepareContainerForConverting(section,simpleContainer); PrepareContainerForConverting(section,simpleContainer);
Point curPos = BaseConverter.BaseConvert(mylist,simpleContainer,defaultLeftPos,currentPosition); Point curPos = ConvertContainer(mylist,simpleContainer,DefaultLeftPosition,CurrentPosition);
AfterConverting (section,mylist); AfterConverting (mylist);
return curPos; return curPos;
} }
protected bool PageBreakAfterGroupChange(ISimpleContainer container) protected void PageBreakAfterGroupChange(BaseSection section,ExporterCollection exporterCollection)
{
if (CheckPageBreakAfterGroupChange(section) ) {
if (DataNavigator.HasMoreData)
{
CurrentPosition = ForcePageBreak (exporterCollection,section);
}
}
}
private static bool CheckPageBreakAfterGroupChange(ISimpleContainer container)
{ {
var groupedRows = BaseConverter.FindGroups(container); var groupedRows = BaseConverter.FindGroupHeader(container);
if (groupedRows.Count > 0) { if (groupedRows.Count > 0) {
var groupedRow = groupedRows[0]; var groupedRow = groupedRows[0];
return groupedRow.PageBreakOnGroupChange; return groupedRow.PageBreakOnGroupChange;
@ -130,9 +182,15 @@ namespace ICSharpCode.Reports.Core.Exporter
} }
protected static Collection<BaseGroupedRow> FindGroups (ISimpleContainer container) protected static Collection<GroupHeader> FindGroupHeader (ISimpleContainer container)
{ {
return new Collection<BaseGroupedRow>(container.Items.OfType<BaseGroupedRow>().ToList()); return new Collection<GroupHeader>(container.Items.OfType<GroupHeader>().ToList());
}
protected static Collection<GroupFooter> FindGroupFooter (ISimpleContainer container)
{
return new Collection<GroupFooter>(container.Items.OfType<GroupFooter>().ToList());
} }
@ -148,39 +206,34 @@ namespace ICSharpCode.Reports.Core.Exporter
public virtual ExporterCollection Convert(BaseReportItem parent, BaseReportItem item) public virtual ExporterCollection Convert(BaseReportItem parent, BaseReportItem item)
{ {
this.parentRectangle = new Rectangle(parent.Location,parent.Size); this.ParentRectangle = new Rectangle(parent.Location,parent.Size);
return new ExporterCollection();; return new ExporterCollection();;
} }
public Point CurrentPosition {get;set;} public Point CurrentPosition {get;set;}
#endregion #endregion
public Rectangle ParentRectangle {
get { return parentRectangle; }
}
public Rectangle ParentRectangle {get;private set;}
public ISinglePage SinglePage { public ISinglePage SinglePage {get;private set;}
get { return singlePage; }
}
public SectionBounds SectionBounds {get; private set;}
public SectionBounds SectionBounds {
get { return sectionBounds; }
}
public IDataNavigator DataNavigator { public IDataNavigator DataNavigator {get;private set;}
get { return dataNavigator; }
}
public ILayouter Layouter { public ILayouter Layouter {get; private set;}
get { return layouter; }
}
public Graphics Graphics {get;set;} public Graphics Graphics {get;set;}
protected IExpressionEvaluatorFacade Evaluator{get;private set;}
protected int DefaultLeftPosition {get;set;}
protected void SaveSectionSize(Size size) protected void SaveSectionSize(Size size)
{ {
@ -188,53 +241,47 @@ namespace ICSharpCode.Reports.Core.Exporter
} }
protected Size RestoreSize protected Size RestoreSectionSize
{ {
get {return this.saveSize;} get {return this.saveSize;}
} }
protected IExpressionEvaluatorFacade Evaluator protected Point ConvertStandardRow(ExporterCollection mylist, BaseSection section, ISimpleContainer simpleContainer)
{ {
get {return this.evaluator;} var rowSize = simpleContainer.Size;
PrepareContainerForConverting(section,simpleContainer);
Point curPos = ConvertContainer(mylist,simpleContainer,DefaultLeftPosition,CurrentPosition);
AfterConverting (mylist);
simpleContainer.Size = rowSize;
return curPos;
} }
protected void PrepareContainerForConverting(BaseSection section,ISimpleContainer simpleContainer) protected void PrepareContainerForConverting(BaseSection section,ISimpleContainer simpleContainer)
{ {
if (section != null) { FireSectionRendering(section);
FireSectionRendering(section);
}
LayoutRow(simpleContainer); LayoutRow(simpleContainer);
} }
protected void AfterConverting (BaseSection section,ExporterCollection convertedList) protected void AfterConverting (ExporterCollection convertedList)
{ {
StandardPrinter.EvaluateRow(Evaluator,convertedList); StandardPrinter.EvaluateRow(Evaluator,convertedList);
} }
protected Point ConvertStandardRow(ExporterCollection mylist, BaseSection section, ISimpleContainer simpleContainer, int defaultLeftPos, Point currentPosition) public static Point ConvertContainer(ExporterCollection myList,ISimpleContainer container,int leftPos,Point curPos)
{
FillRow(simpleContainer);
PrepareContainerForConverting(section,simpleContainer);
Point curPos = BaseConverter.BaseConvert(mylist,simpleContainer,defaultLeftPos,currentPosition);
AfterConverting (section,mylist);
return curPos;
}
protected static Point BaseConvert(ExporterCollection myList,ISimpleContainer container,int leftPos,Point curPos)
{ {
ExporterCollection ml = BaseConverter.ConvertItems (container, curPos); ExporterCollection ml = BaseConverter.ConvertItems (container, curPos);
myList.AddRange(ml); myList.AddRange(ml);
return new Point (leftPos,curPos.Y + container.Size.Height + (3 *GlobalValues.GapBetweenContainer)); return new Point (leftPos,curPos.Y + container.Size.Height);
} }
private void FillRow (ISimpleContainer row) protected void FillRow (ISimpleContainer row)
{ {
Console.WriteLine("\tFillRow");
DataNavigator.Fill(row.Items); DataNavigator.Fill(row.Items);
} }

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

@ -42,8 +42,8 @@ namespace ICSharpCode.Reports.Core.Exporter
if (PrintHelper.IsTextOnlyRow(simpleContainer)) { if (PrintHelper.IsTextOnlyRow(simpleContainer)) {
ExporterCollection myList = new ExporterCollection(); ExporterCollection myList = new ExporterCollection();
BaseConverter.BaseConvert (myList,simpleContainer,parent.Location.X, ConvertContainer (myList,simpleContainer,parent.Location.X,
new Point(base.SectionBounds.DetailStart.X,base.SectionBounds.DetailStart.Y)); new Point(base.SectionBounds.DetailStart.X,base.SectionBounds.DetailStart.Y));
return myList; return myList;
} else { } else {
@ -58,27 +58,16 @@ namespace ICSharpCode.Reports.Core.Exporter
base.CurrentPosition = new Point(base.SectionBounds.DetailStart.X,base.SectionBounds.DetailStart.Y); base.CurrentPosition = new Point(base.SectionBounds.DetailStart.X,base.SectionBounds.DetailStart.Y);
BaseSection section = parent as BaseSection; BaseSection section = parent as BaseSection;
int defaultLeftPos = parent.Location.X; DefaultLeftPosition = parent.Location.X;
Size groupSize = Size.Empty; Size groupSize = Size.Empty;
Size childSize = Size.Empty; Size childSize = Size.Empty;
Console.WriteLine("-------------------START");
Console.WriteLine ("section {0}",section.Size);
Console.WriteLine();
if (section.Items.IsGrouped) if (section.Items.IsGrouped)
{ {
groupSize = section.Items[0].Size; groupSize = section.Items[0].Size;
childSize = section.Items[1].Size; childSize = section.Items[1].Size;
Console.WriteLine ("group {0}",section.Items[0].Size);
Console.WriteLine ("detail {0}",section.Items[1].Size);
} }
Rectangle pageBreakRect = Rectangle.Empty;
do { do {
base.SaveSectionSize(section.Size); base.SaveSectionSize(section.Size);
@ -93,78 +82,55 @@ namespace ICSharpCode.Reports.Core.Exporter
base.Evaluator.SinglePage.IDataNavigator = childNavigator; base.Evaluator.SinglePage.IDataNavigator = childNavigator;
base.CurrentPosition = ConvertGroupHeader(exporterCollection,section,defaultLeftPos,base.CurrentPosition); base.CurrentPosition = ConvertGroupHeader(exporterCollection,section,base.CurrentPosition);
section.Size = base.RestoreSize; section.Size = base.RestoreSectionSize;
section.Items[0].Size = groupSize; section.Items[0].Size = groupSize;
section.Items[1].Size = childSize; section.Items[1].Size = childSize;
childNavigator.Reset(); childNavigator.Reset();
childNavigator.MoveNext(); childNavigator.MoveNext();
Console.WriteLine("-------------------after group");
Console.WriteLine ("section {0}",section.Size);
Console.WriteLine ("group {0}",section.Items[0].Size);
Console.WriteLine ("detail {0}",section.Items[1].Size);
Console.WriteLine();
//Convert children //Convert children
if (childNavigator != null) { if (childNavigator != null) {
StandardPrinter.AdjustBackColor(simpleContainer,GlobalValues.DefaultBackColor); StandardPrinter.AdjustBackColor(simpleContainer,GlobalValues.DefaultBackColor);
do do
{ {
Console.WriteLine("-----------------childs"); Console.WriteLine("");
Console.WriteLine ("section {0}",section.Size); section.Size = base.RestoreSectionSize;
Console.WriteLine ("group {0}",section.Items[0].Size);
Console.WriteLine ("detail {0}",section.Items[1].Size);
Console.WriteLine();
section.Size = base.RestoreSize;
section.Items[0].Size = groupSize; section.Items[0].Size = groupSize;
section.Items[1].Size = childSize; section.Items[1].Size = childSize;
Console.WriteLine("\tFillRow");
childNavigator.Fill(simpleContainer.Items); childNavigator.Fill(simpleContainer.Items);
base.CurrentPosition = ConvertGroupChilds (exporterCollection,section,simpleContainer);
base.CurrentPosition = ConvertGroupChilds (exporterCollection,section, FireRowRendering(simpleContainer,childNavigator);
simpleContainer,defaultLeftPos,base.CurrentPosition); CheckForPageBreak(section,exporterCollection);
pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)section.Items[1],base.CurrentPosition); Console.WriteLine("");
// section.Items[1].Size = base.RestoreSize;
if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds )) {
base.CurrentPosition = ForcePageBreak (exporterCollection,section);
}
} }
while ( childNavigator.MoveNext()); while ( childNavigator.MoveNext());
if (PageBreakAfterGroupChange(section) ) { // GroupFooter
base.ConvertGroupFooter(section,section,exporterCollection);
if ( base.DataNavigator.HasMoreData) base.PageBreakAfterGroupChange(section,exporterCollection);
{
base.CurrentPosition = ForcePageBreak (exporterCollection,section);
}
}
base.Evaluator.SinglePage.IDataNavigator = base.DataNavigator; base.Evaluator.SinglePage.IDataNavigator = base.DataNavigator;
} }
} }
else else
{ {
// No Grouping at all // No Grouping at all, the first item in section.items is the DetailRow
Size dd = section.Items[0].Size; Console.WriteLine("");
Console.WriteLine("---------NoGrouping"); Size containerSize = section.Items[0].Size;
Console.WriteLine ("section {0}",section.Size); base.FillRow(simpleContainer);
Console.WriteLine ("row {0}",dd);
base.CurrentPosition = ConvertStandardRow (exporterCollection,section,simpleContainer,defaultLeftPos,base.CurrentPosition); base.CurrentPosition = ConvertStandardRow (exporterCollection,section,simpleContainer);
section.Size = base.RestoreSize; base.FireRowRendering(simpleContainer,base.DataNavigator);
section.Items[0].Size = dd; section.Size = base.RestoreSectionSize;
section.Items[0].Size = containerSize;
Console.WriteLine("");
} }
CheckForPageBreak (section,exporterCollection);
pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)section.Items[0],base.CurrentPosition);
if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds)) {
base.CurrentPosition = ForcePageBreak (exporterCollection,section);
}
ShouldDrawBorder (section,exporterCollection); ShouldDrawBorder (section,exporterCollection);
} }
while (base.DataNavigator.MoveNext()); while (base.DataNavigator.MoveNext());
@ -178,6 +144,16 @@ namespace ICSharpCode.Reports.Core.Exporter
} }
void CheckForPageBreak(BaseSection section, ExporterCollection exporterCollection)
{
var pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)section.Items[0],base.CurrentPosition);
if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds)) {
base.CurrentPosition = ForcePageBreak (exporterCollection,section);
}
}
protected override Point ForcePageBreak(ExporterCollection exporterCollection, BaseSection section) protected override Point ForcePageBreak(ExporterCollection exporterCollection, BaseSection section)
{ {
base.ForcePageBreak(exporterCollection,section); base.ForcePageBreak(exporterCollection,section);
@ -191,11 +167,12 @@ namespace ICSharpCode.Reports.Core.Exporter
} }
private Point ConvertGroupHeader(ExporterCollection exportList,BaseSection section,int leftPos,Point offset) private Point ConvertGroupHeader(ExporterCollection exportList,BaseSection section,Point offset)
{ {
var retVal = Point.Empty; var retVal = Point.Empty;
var rowSize = Size.Empty;
ReportItemCollection groupCollection = null; ReportItemCollection groupCollection = null;
var groupedRows = BaseConverter.FindGroups(section); var groupedRows = BaseConverter.FindGroupHeader(section);
if (groupedRows.Count == 0) { if (groupedRows.Count == 0) {
groupCollection = section.Items.ExtractGroupedColumns(); groupCollection = section.Items.ExtractGroupedColumns();
base.DataNavigator.Fill(groupCollection); base.DataNavigator.Fill(groupCollection);
@ -205,10 +182,14 @@ namespace ICSharpCode.Reports.Core.Exporter
StandardPrinter.EvaluateRow(base.Evaluator,list); StandardPrinter.EvaluateRow(base.Evaluator,list);
exportList.AddRange(list); exportList.AddRange(list);
AfterConverting (section,list); AfterConverting (list);
retVal = new Point (leftPos,offset.Y + groupCollection[0].Size.Height + 20 + (3 *GlobalValues.GapBetweenContainer)); retVal = new Point (DefaultLeftPosition,offset.Y + groupCollection[0].Size.Height + 20 + (3 *GlobalValues.GapBetweenContainer));
} else { } else {
retVal = ConvertStandardRow(exportList,section,groupedRows[0],leftPos,offset); FillRow(groupedRows[0]);
rowSize = groupedRows[0].Size;
retVal = ConvertStandardRow(exportList,section,groupedRows[0]);
base.FireGroupHeaderRendering(groupedRows[0]);
groupedRows[0].Size = rowSize;
} }
return retVal; return retVal;
} }

115
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedTableConverter.cs

@ -49,33 +49,36 @@ namespace ICSharpCode.Reports.Core.Exporter
BaseSection section = table.Parent as BaseSection; BaseSection section = table.Parent as BaseSection;
ISimpleContainer headerRow = null;
Point dataAreaStart = new Point(table.Items[0].Location.X,table.Items[0].Location.Y + base.CurrentPosition.Y);
base.CurrentPosition = new Point(PrintHelper.DrawingAreaRelativeToParent(this.table.Parent,this.table).Location.X, base.CurrentPosition = new Point(PrintHelper.DrawingAreaRelativeToParent(this.table.Parent,this.table).Location.X,
base.SectionBounds.DetailStart.Y); base.SectionBounds.DetailStart.Y);
int defaultLeftPos = base.CurrentPosition.X;
Point dataAreaStart = new Point(table.Items[0].Location.X,table.Items[0].Location.Y + base.CurrentPosition.Y); base.DefaultLeftPosition = base.CurrentPosition.X;
ISimpleContainer headerRow = null;
Rectangle pageBreakRect = Rectangle.Empty;
this.table.Items.SortByLocation(); this.table.Items.SortByLocation();
// Header // Header
var simpleContainer = table.Items[0] as ISimpleContainer; var simpleContainer = table.Items[0] as ISimpleContainer;
Size containerSize = Size.Empty;
if (simpleContainer.Items.Count > 0) if (simpleContainer.Items.Count > 0)
{ {
simpleContainer.Location = new Point (simpleContainer.Location.X,simpleContainer.Location.Y); simpleContainer.Location = new Point (simpleContainer.Location.X,simpleContainer.Location.Y);
simpleContainer.Parent = (BaseReportItem)this.table; simpleContainer.Parent = (BaseReportItem)this.table;
base.SaveSectionSize( new Size (simpleContainer.Size.Width,simpleContainer.Size.Height)); base.SaveSectionSize(section.Size);
containerSize = simpleContainer.Size;
if (PrintHelper.IsTextOnlyRow(simpleContainer) ) { if (PrintHelper.IsTextOnlyRow(simpleContainer) ) {
headerRow = simpleContainer; headerRow = simpleContainer;
base.CurrentPosition = BaseConverter.BaseConvert(exporterCollection,headerRow,defaultLeftPos,base.CurrentPosition); base.PrepareContainerForConverting(section,headerRow);
base.CurrentPosition = ConvertContainer(exporterCollection,headerRow,base.DefaultLeftPosition,base.CurrentPosition);
} }
BaseGroupedRow row = table.Items[1] as BaseGroupedRow; GroupHeader row = table.Items[1] as GroupHeader;
if (row != null) { if (row != null) {
@ -88,7 +91,7 @@ namespace ICSharpCode.Reports.Core.Exporter
base.Evaluator.SinglePage.IDataNavigator = childNavigator; base.Evaluator.SinglePage.IDataNavigator = childNavigator;
// Convert Grouping Header // Convert Grouping Header
base.CurrentPosition = ConvertGroupHeader(exporterCollection,section,defaultLeftPos,base.CurrentPosition); base.CurrentPosition = ConvertGroupHeader(exporterCollection,section,base.CurrentPosition);
childNavigator.Reset(); childNavigator.Reset();
childNavigator.MoveNext(); childNavigator.MoveNext();
@ -99,31 +102,21 @@ namespace ICSharpCode.Reports.Core.Exporter
{ {
StandardPrinter.AdjustBackColor(simpleContainer,GlobalValues.DefaultBackColor); StandardPrinter.AdjustBackColor(simpleContainer,GlobalValues.DefaultBackColor);
simpleContainer = table.Items[2] as ISimpleContainer; simpleContainer = table.Items[2] as ISimpleContainer;
containerSize = simpleContainer.Size;
childNavigator.Fill(simpleContainer.Items); childNavigator.Fill(simpleContainer.Items);
base.CurrentPosition = ConvertGroupChilds (exporterCollection, base.CurrentPosition = ConvertGroupChilds (exporterCollection,section,simpleContainer);
section,
simpleContainer,defaultLeftPos,base.CurrentPosition); simpleContainer.Size = containerSize;
pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)simpleContainer,base.CurrentPosition); CheckForPageBreak(section,simpleContainer,headerRow,exporterCollection);
if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds))
{
base.CurrentPosition = base.ForcePageBreak(exporterCollection,section);
base.CurrentPosition = ConvertStandardRow (exporterCollection,section,headerRow,defaultLeftPos,base.CurrentPosition);
}
} }
while ( childNavigator.MoveNext()); while ( childNavigator.MoveNext());
if (PageBreakAfterGroupChange(table) ) // GroupFooter
{ base.ConvertGroupFooter(section,table,exporterCollection);
if ( base.DataNavigator.HasMoreData) base.PageBreakAfterGroupChange(section,exporterCollection);
{
base.CurrentPosition = base.ForcePageBreak(exporterCollection,section);
base.CurrentPosition = ConvertStandardRow (exporterCollection,section,headerRow,defaultLeftPos,base.CurrentPosition);
}
}
base.Evaluator.SinglePage.IDataNavigator = base.DataNavigator; base.Evaluator.SinglePage.IDataNavigator = base.DataNavigator;
} }
@ -135,27 +128,25 @@ namespace ICSharpCode.Reports.Core.Exporter
{ {
// No Grouping at all // No Grouping at all
base.SaveSectionSize(simpleContainer.Size);
simpleContainer = table.Items[1] as ISimpleContainer; simpleContainer = table.Items[1] as ISimpleContainer;
base.SaveSectionSize(section.Size);
containerSize = simpleContainer.Size;
Console.WriteLine("datasection - NO grouping");
do { do {
Console.WriteLine("");
PrintHelper.AdjustSectionLocation(section); PrintHelper.AdjustSectionLocation(section);
CheckForPageBreak(section,simpleContainer,headerRow,exporterCollection);
pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)simpleContainer,base.CurrentPosition); FillRow(simpleContainer);
base.CurrentPosition = ConvertStandardRow (exporterCollection,section,simpleContainer);
if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds)) FireRowRendering(simpleContainer,base.DataNavigator);
{ simpleContainer.Size = containerSize;
base.CurrentPosition = base.ForcePageBreak(exporterCollection,section); section.Size = base.RestoreSectionSize;
base.CurrentPosition = ConvertStandardRow (exporterCollection,section,headerRow,defaultLeftPos,base.CurrentPosition); Console.WriteLine("");
}
base.CurrentPosition = ConvertStandardRow (exporterCollection,section,simpleContainer,defaultLeftPos,base.CurrentPosition);
simpleContainer.Size = base.RestoreSize;
} }
while (base.DataNavigator.MoveNext()); while (base.DataNavigator.MoveNext());
Console.WriteLine("");
Console.WriteLine("END of datasection - NO grouping");
base.DataNavigator.Reset(); base.DataNavigator.Reset();
base.DataNavigator.MoveNext(); base.DataNavigator.MoveNext();
SectionBounds.ReportFooterRectangle = new Rectangle(SectionBounds.ReportFooterRectangle.Left, SectionBounds.ReportFooterRectangle = new Rectangle(SectionBounds.ReportFooterRectangle.Left,
@ -167,21 +158,43 @@ namespace ICSharpCode.Reports.Core.Exporter
return exporterCollection; return exporterCollection;
} }
#region Pagebreak
void CheckForPageBreak(BaseSection section,ISimpleContainer container,ISimpleContainer headerRow, ExporterCollection exporterCollection)
{
var pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)container,base.CurrentPosition);
if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds))
{
base.CurrentPosition = ForcePageBreak(exporterCollection,section);
base.CurrentPosition = ConvertStandardRow (exporterCollection,section,headerRow);
}
}
protected override Point ForcePageBreak(ExporterCollection exporterCollection, BaseSection section) protected override Point ForcePageBreak(ExporterCollection exporterCollection, BaseSection section)
{ {
base.ForcePageBreak(exporterCollection, section); base.ForcePageBreak(exporterCollection, section);
return base.SectionBounds.ReportHeaderRectangle.Location; return base.SectionBounds.ReportHeaderRectangle.Location;
} }
//Copy from GroupedRow
private Point ConvertGroupHeader(ExporterCollection exportList,BaseSection section,int leftPos,Point offset) #endregion
#region Grouping
private Point ConvertGroupHeader(ExporterCollection exportList,BaseSection section,Point offset)
{ {
var retVal = Point.Empty; var retVal = Point.Empty;
var rowSize = Size.Empty;
ReportItemCollection groupCollection = null; ReportItemCollection groupCollection = null;
var groupedRow = new Collection<BaseGroupedRow>(table.Items.OfType<BaseGroupedRow>().ToList()); var groupedRow = new Collection<GroupHeader>(table.Items.OfType<GroupHeader>().ToList());
if (groupedRow.Count == 0) { if (groupedRow.Count == 0) {
groupCollection = section.Items.ExtractGroupedColumns(); groupCollection = section.Items.ExtractGroupedColumns();
base.DataNavigator.Fill(groupCollection); base.DataNavigator.Fill(groupCollection);
base.FireSectionRendering(section); base.FireSectionRendering(section);
@ -190,14 +203,20 @@ namespace ICSharpCode.Reports.Core.Exporter
StandardPrinter.EvaluateRow(base.Evaluator,list); StandardPrinter.EvaluateRow(base.Evaluator,list);
exportList.AddRange(list); exportList.AddRange(list);
AfterConverting (section,list); AfterConverting (list);
retVal = new Point (leftPos,offset.Y + groupCollection[0].Size.Height + 20 + (3 *GlobalValues.GapBetweenContainer)); retVal = new Point (base.DefaultLeftPosition,offset.Y + groupCollection[0].Size.Height + 20 + (3 *GlobalValues.GapBetweenContainer));
} else { } else {
retVal = ConvertStandardRow(exportList,section,groupedRow[0],leftPos,offset); rowSize = groupedRow[0].Size;
base.FireGroupHeaderRendering(groupedRow[0]);
retVal = ConvertStandardRow(exportList,section,groupedRow[0]);
groupedRow[0].Size = rowSize;
} }
return retVal; return retVal;
} }
#endregion
} }
} }

58
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/DataPageBuilder.cs

@ -16,7 +16,6 @@ namespace ICSharpCode.Reports.Core.Exporter
readonly object addLock = new object(); readonly object addLock = new object();
//internal delegate ExporterCollection ConverterDelegate (BaseSection s);
#region Constructor #region Constructor
@ -89,8 +88,32 @@ namespace ICSharpCode.Reports.Core.Exporter
protected override void BuildReportFooter (Rectangle footerRectangle) protected override void BuildReportFooter (Rectangle footerRectangle)
{ {
base.ReportModel.ReportFooter.SectionOffset = footerRectangle.Top; bool pageBreak = false;
ExporterCollection convertedList = base.ConvertSection (base.ReportModel.ReportFooter,this.dataNavigator.CurrentRow);
base.ReportModel.ReportFooter.SectionOffset = footerRectangle.Top + GlobalValues.GapBetweenContainer;
if (!PrintHelper.IsRoomForFooter(base.SectionBounds,base.ReportModel.ReportFooter.Location)) {
PageBreak();
base.ReportModel.ReportFooter.SectionOffset = SectionBounds.DetailStart.Y;
pageBreak = true;
}
ExporterCollection convertedList = new ExporterCollection();
var section = base.ReportModel.DetailSection;
var table = section.Items[0] as BaseTableItem;
if (table != null) {
if (pageBreak) {
// Print the HeaderRow
var headerRow = table.Items[0];
var curPos = BaseConverter.ConvertContainer(convertedList,(ISimpleContainer)headerRow,SectionBounds.PageHeaderRectangle.Left,SectionBounds.PageHeaderRectangle.Location);
base.SinglePage.Items.AddRange(convertedList);
base.ReportModel.ReportFooter.SectionOffset = curPos.Y + GlobalValues.GapBetweenContainer;
}
}
//allways print the reportFooter
convertedList = base.ConvertSection (base.ReportModel.ReportFooter,this.dataNavigator.CurrentRow);
base.SinglePage.Items.AddRange(convertedList); base.SinglePage.Items.AddRange(convertedList);
} }
@ -103,7 +126,6 @@ namespace ICSharpCode.Reports.Core.Exporter
} }
protected Point BuildDetail (BaseSection section,IDataNavigator dataNavigator) protected Point BuildDetail (BaseSection section,IDataNavigator dataNavigator)
{ {
ExporterCollection convertedList = new ExporterCollection(); ExporterCollection convertedList = new ExporterCollection();
@ -116,8 +138,11 @@ namespace ICSharpCode.Reports.Core.Exporter
if (baseConverter != null) { if (baseConverter != null) {
baseConverter.SectionRendering += OnSectionRendering; baseConverter.SectionRendering += OnSectionRendering;
baseConverter.GroupHeaderRendering += OnGroupHeaderRendering;
baseConverter.GroupFooterRendering += OnGroupFooterRendering;
baseConverter.RowRendering += OnRowRendering;
baseConverter.Graphics = base.Graphics; baseConverter.Graphics = base.Graphics;
baseConverter.PageFull += new EventHandler<NewPageEventArgs>(OnPageFull); baseConverter.PageFull += new EventHandler<NewPageEventArgs>(OnPageFull);
@ -133,12 +158,34 @@ namespace ICSharpCode.Reports.Core.Exporter
void OnSectionRendering (object sender,SectionRenderEventArgs e) void OnSectionRendering (object sender,SectionRenderEventArgs e)
{ {
// Console.WriteLine("Datapagebuilder : OnSectionRendering");
base.FireSectionRenderEvent(e.Section,e.RowNumber); base.FireSectionRenderEvent(e.Section,e.RowNumber);
} }
void OnGroupHeaderRendering (object sender, GroupHeaderEventArgs ghea)
{
// Console.WriteLine("Datapagebuilder : OnGroupHeaderRendering");
base.FireGroupHeaderEvent(ghea);
}
void OnGroupFooterRendering (object sender, GroupFooterEventArgs gfea)
{
// Console.WriteLine ("DatapageBuilder : OnGroupFooterEvent");
base.FireGroupFooterEvent(gfea);
}
void OnRowRendering (object sender,RowRenderEventArgs rrea)
{
// Console.WriteLine("Datapagebuilder : OnRowRendering");
base.FireRowRenderEvent(rrea);
}
#endregion #endregion
private void WritePages () private void WritePages ()
{ {
this.dataNavigator = this.dataManager.GetNavigator; this.dataNavigator = this.dataManager.GetNavigator;
@ -170,7 +217,6 @@ namespace ICSharpCode.Reports.Core.Exporter
} }
#region Public Methodes #region Public Methodes
protected override void AddPage (ExporterPage page) protected override void AddPage (ExporterPage page)

17
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/ExpressionEvaluatorFacade.cs

@ -33,13 +33,20 @@ namespace ICSharpCode.Reports.Expressions.ReportingLanguage
public string Evaluate (string expression) public string Evaluate (string expression)
{ {
if (CanEvaluate(expression)) { try {
IExpression compiled = compiler.CompileExpression<string>(expression); if (CanEvaluate(expression)) {
this.context.ContextObject = this.SinglePage; IExpression compiled = compiler.CompileExpression<string>(expression);
if (compiled != null) { this.context.ContextObject = this.SinglePage;
return (compiled.Evaluate(context)).ToString(); if (compiled != null) {
return (compiled.Evaluate(context)).ToString();
}
} }
} catch (Exception e) {
// Console.WriteLine("error");
expression = e.Message;
} }
return expression; return expression;
} }

122
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/ReportingLanguage/ReportingLanguageCompiler.cs

@ -17,7 +17,7 @@ namespace ICSharpCode.Reports.Expressions.ReportingLanguage
/// </summary> /// </summary>
public class ReportingLanguageCompiler:SimpleExpressionLanguageCompiler public class ReportingLanguageCompiler:SimpleExpressionLanguageCompiler
{ {
private IPageInfo singlePage; // private IPageInfo singlePage;
private ReportingLanguage reportingLanguage; private ReportingLanguage reportingLanguage;
private Compiler compiler; private Compiler compiler;
@ -97,9 +97,6 @@ namespace ICSharpCode.Reports.Expressions.ReportingLanguage
return CompileExpressionNode(factory, astNode.ChildNodes[2]); return CompileExpressionNode(factory, astNode.ChildNodes[2]);
case "FieldsSectionStmt" : case "FieldsSectionStmt" :
//return CompileExpressionNode (factory,astNode.ChildNodes[2]); //return CompileExpressionNode (factory,astNode.ChildNodes[2]);
object o0 =astNode.ChildNodes[0].Token.Text;
object o1 =astNode.ChildNodes[1].Token.Text;
object o2 =astNode.ChildNodes[2].Token.Text;
IExpression l = CompileExpressionNode(factory, astNode.ChildNodes[2]); IExpression l = CompileExpressionNode(factory, astNode.ChildNodes[2]);
return factory.CreateFunction(astNode.ChildNodes[0].Token.Text, return factory.CreateFunction(astNode.ChildNodes[0].Token.Text,
l); l);
@ -187,122 +184,7 @@ namespace ICSharpCode.Reports.Expressions.ReportingLanguage
} }
public IPageInfo SinglePage {get;set;}
// don't call base
protected IExpression old_CompileExpressionNode(IExpressionNodeFactory factory,ParseTreeNode astNode)
// protected override IExpression old_CompileExpressionNode(IExpressionNodeFactory factory,ParseTreeNode astNode)
{
switch (astNode.Term.Name)
{
case "Number":
var num = TypeNormalizer.EnsureType<double>(astNode.Token.Value);
return factory.CreateLiteral(num);
case "String":
var str = TypeNormalizer.EnsureType<string>(astNode.Token.Value);
return factory.CreateLiteral(str);
case "Boolean":
var bln = TypeNormalizer.EnsureType<bool>(astNode.Token.Value);
return factory.CreateLiteral(bln);
case "Identifier":
var variable = astNode.Token.Value;
if (variable != null)
return factory.CreateVariable(variable.ToString());
break;
case "Symbol" :
var str_1 = TypeNormalizer.EnsureType<string>(astNode.Token.Value);
return factory.CreateLiteral(str_1);
case "UserSectionStmt":
return factory.CreateFunction(astNode.ChildNodes[2].Token.Text,null);
case "GlobalSectionStmt" :
return factory.CreateLiteral(this.SinglePage.EvaluatePropertyPath(astNode.ChildNodes[2].Token.Text));
case "ParameterSectionStmt" :
return CompileExpressionNode(factory, astNode.ChildNodes[2]);
case "ParExpr" :
return CompileExpressionNode(factory, astNode.ChildNodes[0]);
case "BinExpr":
if (astNode.ChildNodes.Count == 3 &&
astNode.ChildNodes[1].Term is SymbolTerminal)
{
IExpression left = CompileExpressionNode(factory, astNode.ChildNodes[0]);
IExpression right = CompileExpressionNode(factory, astNode.ChildNodes[2]);
return factory.CreateBinaryOperator(astNode.ChildNodes[1].Term.Name, left, right);
}
if (astNode.ChildNodes.Count == 2 &&
astNode.ChildNodes[0].Term is SymbolTerminal)
{
IExpression arg = CompileExpressionNode(factory, astNode.ChildNodes[1]);
return factory.CreateUnaryOperator(astNode.ChildNodes[0].Term.Name, arg);
}
if (astNode.ChildNodes.Count == 2 &&
astNode.ChildNodes[1].Term is SymbolTerminal)
{
IExpression arg = CompileExpressionNode(factory, astNode.ChildNodes[0]);
return factory.CreateUnaryOperator(astNode.ChildNodes[1].Term.Name, arg);
}
break;
case "QualifiedName":
var parts = new List<string>();
if (astNode.ChildNodes.Count == 2)
return new QualifiedName(new[] {astNode.ChildNodes[1].Token.ValueString});
/*
//Condition ought to be impossible
if (astNode.ChildNodes.Count != 3 )
throw new Exception("Malformed QualifiedName - should have 3 child nodes");
*/
if (astNode.ChildNodes.Count == 1) {
return CompileExpressionNode(factory, astNode.ChildNodes[0]);
}
SimpleExpressionLanguageCompiler.ExtractQualifiedName(astNode, parts);
return new QualifiedName(parts.ToArray());
case "FunctionExpression":
string functionName = (astNode.ChildNodes[0].ChildNodes[0].Token.ValueString);
var args = new IExpression[astNode.ChildNodes[0].ChildNodes[0].ChildNodes.Count];
for (int i = 0; i < astNode.ChildNodes[0].ChildNodes[0].ChildNodes.Count;i++)
{
args[i] = CompileExpressionNode(factory, astNode.ChildNodes[1].ChildNodes[i]);
}
return factory.CreateFunction(functionName, args);
case "IfThen":
IExpression condition = CompileExpressionNode(factory,astNode.ChildNodes[1].ChildNodes[0]);
IExpression trueExpr = CompileExpressionNode(factory, astNode.ChildNodes[3]);
IExpression falseExpr = null;
if (astNode.ChildNodes.Count == 6)
falseExpr = CompileExpressionNode(factory, astNode.ChildNodes[5]);
var func = new IfThen();
if (falseExpr != null)
func.AcceptArguments(condition, trueExpr, falseExpr);
else
func.AcceptArguments(condition, trueExpr);
return func;
/*
case "ArrayExpression":
IExpression context = CompileExpressionNode(factory, astNode.ChildNodes[0]);
IExpression index = CompileExpressionNode(factory, astNode.ChildNodes[1]);
var indexer = new ItemAtIndex();
indexer.AcceptArguments(context, index);
return indexer;
*/
}
return null;
}
public IPageInfo SinglePage {
get { return singlePage; }
set { singlePage = value; }
}
} }
} }

5
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Compilation/Functions/AggregateFunctions/AggregateFunction.cs

@ -124,9 +124,10 @@ namespace SimpleExpressionEvaluator.Compilation.Functions.AggregateFunctions
} else { } else {
list.Add(true); list.Add(true);
} }
} else { }
else {
string str = String.Format ("<{0}> not found in AggregateFunction",data.ToString()); string str = String.Format ("<{0}> not found in AggregateFunction",data.ToString());
// throw new FieldNotFoundException(str); throw new FieldNotFoundException(str);
} }
} }
return list; return list;

3
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/IReportCreator.cs

@ -15,5 +15,8 @@ namespace ICSharpCode.Reports.Core
PagesCollection Pages{get;} PagesCollection Pages{get;}
event EventHandler<PageCreatedEventArgs> PageCreated; event EventHandler<PageCreatedEventArgs> PageCreated;
event EventHandler<SectionRenderEventArgs> SectionRendering; event EventHandler<SectionRenderEventArgs> SectionRendering;
event EventHandler<GroupHeaderEventArgs> GroupHeaderRendering;
event EventHandler<GroupFooterEventArgs> GroupFooterRendering;
event EventHandler<RowRenderEventArgs> RowRendering;
} }
} }

4
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Interfaces/IItemConverter.cs

@ -18,6 +18,7 @@ namespace ICSharpCode.Reports.Core.Interfaces
{ {
event EventHandler <NewPageEventArgs> PageFull; event EventHandler <NewPageEventArgs> PageFull;
event EventHandler<SectionRenderEventArgs> SectionRendering; event EventHandler<SectionRenderEventArgs> SectionRendering;
SectionBounds SectionBounds {get;} SectionBounds SectionBounds {get;}
IDataNavigator DataNavigator {get;} IDataNavigator DataNavigator {get;}
Rectangle ParentRectangle {get;} Rectangle ParentRectangle {get;}
@ -36,5 +37,8 @@ namespace ICSharpCode.Reports.Core.Interfaces
{ {
ExporterCollection Convert (BaseReportItem parent,BaseReportItem item); ExporterCollection Convert (BaseReportItem parent,BaseReportItem item);
Point CurrentPosition {get;set;} Point CurrentPosition {get;set;}
event EventHandler<GroupHeaderEventArgs> GroupHeaderRendering;
event EventHandler<RowRenderEventArgs> RowRendering;
event EventHandler<GroupFooterEventArgs> GroupFooterRendering;
} }
} }

58
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/RenderTable.cs

@ -25,7 +25,7 @@ namespace ICSharpCode.Reports.Core
ISinglePage singlePage; ISinglePage singlePage;
ILayouter layouter; ILayouter layouter;
ReportPageEventArgs reportPageEventArgs; ReportPageEventArgs reportPageEventArgs;
BaseSection currentSection; BaseSection currentSection;
public RenderTable(IDataNavigator datanavigator,Rectangle parentRectangle,ISinglePage singlePage,ILayouter layouter,BaseSection section) public RenderTable(IDataNavigator datanavigator,Rectangle parentRectangle,ISinglePage singlePage,ILayouter layouter,BaseSection section)
{ {
@ -66,51 +66,51 @@ namespace ICSharpCode.Reports.Core
// foreach (BaseRowItem row in table.Items) // foreach (BaseRowItem row in table.Items)
// { // {
rs = simpleContainer.Size; rs = simpleContainer.Size;
PrintHelper.AdjustParent(table as BaseReportItem,table.Items); PrintHelper.AdjustParent(table as BaseReportItem,table.Items);
// if (PrintHelper.IsTextOnlyRow(simpleContainer) ) // if (PrintHelper.IsTextOnlyRow(simpleContainer) )
// { // {
PrintHelper.SetLayoutForRow(ReportPageEventArgs.PrintPageEventArgs.Graphics,Layouter,simpleContainer); PrintHelper.SetLayoutForRow(ReportPageEventArgs.PrintPageEventArgs.Graphics,Layouter,simpleContainer);
var r = StandardPrinter.RenderContainer(simpleContainer,evaluator,currentPosition,ReportPageEventArgs); var r = StandardPrinter.RenderContainer(simpleContainer,evaluator,currentPosition,ReportPageEventArgs);
currentPosition = PrintHelper.ConvertRectangleToCurentPosition (r); currentPosition = PrintHelper.ConvertRectangleToCurentPosition (r);
table.Location = saveLocation; table.Location = saveLocation;
// } // }
// else { // else {
//--------------- //---------------
simpleContainer = table.Items[1] as ISimpleContainer; simpleContainer = table.Items[1] as ISimpleContainer;
int adjust = simpleContainer.Location.Y - saveLocation.Y; int adjust = simpleContainer.Location.Y - saveLocation.Y;
simpleContainer.Location = new Point(simpleContainer.Location.X,simpleContainer.Location.Y - adjust - 3 * GlobalValues.GapBetweenContainer); simpleContainer.Location = new Point(simpleContainer.Location.X,simpleContainer.Location.Y - adjust - 3 * GlobalValues.GapBetweenContainer);
rs = simpleContainer.Size; rs = simpleContainer.Size;
do { do {
pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)table,currentPosition); pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)table,currentPosition);
if (PrintHelper.IsPageFull(pageBreakRect,this.SectionBounds)) { if (PrintHelper.IsPageFull(pageBreakRect,this.SectionBounds)) {
Console.WriteLine("PageBreak - PageFull"); Console.WriteLine("PageBreak - PageFull");
table.Location = saveLocation; table.Location = saveLocation;
AbstractRenderer.PageBreak(ReportPageEventArgs); AbstractRenderer.PageBreak(ReportPageEventArgs);
return; return;
} }
this.dataNavigator.Fill(simpleContainer.Items); this.dataNavigator.Fill(simpleContainer.Items);
PrintHelper.SetLayoutForRow(ReportPageEventArgs.PrintPageEventArgs.Graphics,Layouter,simpleContainer); PrintHelper.SetLayoutForRow(ReportPageEventArgs.PrintPageEventArgs.Graphics,Layouter,simpleContainer);
r = StandardPrinter.RenderContainer(simpleContainer,evaluator,currentPosition,ReportPageEventArgs); r = StandardPrinter.RenderContainer(simpleContainer,evaluator,currentPosition,ReportPageEventArgs);
currentPosition = PrintHelper.ConvertRectangleToCurentPosition (r); currentPosition = PrintHelper.ConvertRectangleToCurentPosition (r);
simpleContainer.Size = rs; simpleContainer.Size = rs;
} }
while (this.dataNavigator.MoveNext()); while (this.dataNavigator.MoveNext());
//----- //-----
// } // }
} }
@ -214,7 +214,7 @@ namespace ICSharpCode.Reports.Core
public ILayouter Layouter { public ILayouter Layouter {
get { get {
return this.layouter; return this.layouter;
} }
} }

80
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/ReportViewer/ReportViewer.cs

@ -23,7 +23,7 @@ namespace ICSharpCode.Reports.Core.ReportViewer
public partial class PreviewControl public partial class PreviewControl
{ {
public event EventHandler <EventArgs> PreviewLayoutChanged; public event EventHandler <EventArgs> PreviewLayoutChanged;
public event EventHandler<SectionRenderEventArgs> SectionRendering; // public event EventHandler<SectionRenderEventArgs> SectionRendering;
private float zoom; private float zoom;
@ -166,6 +166,10 @@ namespace ICSharpCode.Reports.Core.ReportViewer
ILayouter layouter = new Layouter(); ILayouter layouter = new Layouter();
IReportCreator reportCreator = DataPageBuilder.CreateInstance(reportModel,data,layouter); IReportCreator reportCreator = DataPageBuilder.CreateInstance(reportModel,data,layouter);
reportCreator.SectionRendering += new EventHandler<SectionRenderEventArgs>(PushPrinting); reportCreator.SectionRendering += new EventHandler<SectionRenderEventArgs>(PushPrinting);
reportCreator.GroupHeaderRendering += new EventHandler<GroupHeaderEventArgs>(GroupHeaderRendering);
reportCreator.GroupFooterRendering += GroupFooterRendering;
reportCreator.RowRendering += new EventHandler<RowRenderEventArgs>(RowRendering);
reportCreator.PageCreated += OnPageCreated; reportCreator.PageCreated += OnPageCreated;
reportCreator.BuildExportList(); reportCreator.BuildExportList();
ShowCompleted(); ShowCompleted();
@ -187,46 +191,62 @@ namespace ICSharpCode.Reports.Core.ReportViewer
} }
private void PushPrinting (object sender, SectionRenderEventArgs e ) {
EventHelper.Raise<SectionRenderEventArgs>(SectionRendering,this,e);
}
//testcode to handle sectionrenderevent
/*
private void PushPrinting (object sender,SectionRenderEventArgs e) private void PushPrinting (object sender,SectionRenderEventArgs e)
{ {
string sectionName = e.Section.Name;
/*
if (sectionName == ReportSectionNames.ReportHeader) {
Console.WriteLine("PushPrinting :" + ReportSectionNames.ReportHeader);
}
switch (e.CurrentSection) { else if (sectionName == ReportSectionNames.ReportPageHeader) {
case GlobalEnums.ReportSection.ReportHeader: Console.WriteLine("PushPrinting :" +ReportSectionNames .ReportPageHeader);
break; }
case GlobalEnums.ReportSection.ReportPageHeader:
break;
case GlobalEnums.ReportSection.ReportDetail: else if (sectionName == ReportSectionNames.ReportDetail){
BaseRowItem ri = e.Section.Items[0] as BaseRowItem; Console.WriteLine("PushPrinting :" + ReportSectionNames.ReportDetail);
if (ri != null) { }
BaseDataItem r = (BaseDataItem)ri.Items.Find("Kategoriename");
if (r != null) {
r.DBValue = "xxxxxxx";
}
}
break; else if (sectionName == ReportSectionNames.ReportPageFooter){
case GlobalEnums.ReportSection.ReportPageFooter: Console.WriteLine("PushPrinting :" + ReportSectionNames.ReportPageFooter);
break; }
case GlobalEnums.ReportSection.ReportFooter: else if (sectionName == ReportSectionNames.ReportFooter){
break; Console.WriteLine("PushPrinting :" + ReportSectionNames.ReportFooter);
}
default: else{
break; throw new WrongSectionException(sectionName);
} }
*/
}
private void GroupHeaderRendering (object sender, GroupHeaderEventArgs ghea)
{
Console.WriteLine("ReportViewer - GroupHeaderRendering :");
// BaseGroupedRow v = ghea.GroupHeader;
// v.BackColor = System.Drawing.Color.Red;
}
private void GroupFooterRendering ( object sender, GroupFooterEventArgs gfea)
{
// Console.WriteLine();
Console.WriteLine("ReportViewer - GroupFooterRendering :");
// var v = gfea.GroupFooter;
// v.BackColor = System.Drawing.Color.Red;
// BaseTextItem i = (BaseTextItem)v.Items[0];
// i.Text ="neuer text";
}
private void RowRendering (object sender,RowRenderEventArgs rrea)
{
Console.WriteLine("ReportViewer - RowRendering :");
} }
*/
#endregion #endregion

20
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/IntegrationTests/AggregateFunctionsFixture.cs

@ -75,13 +75,13 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests
Is.EqualTo("2")); Is.EqualTo("2"));
} }
[Test] // [Test]
[ExpectedException(typeof(FieldNotFoundException))] // [ExpectedException(typeof(FieldNotFoundException))]
public void Throw_On_Unknown_Field () // public void Throw_On_Unknown_Field ()
{ // {
const string expression = "=count(unknown)"; // const string expression = "=count(unknown)";
Assert.That(this.evaluator.Evaluate(expression), Is.EqualTo(this.testTable.Rows.Count.ToString())); // Assert.That(this.evaluator.Evaluate(expression), Is.EqualTo(expression));
} // }
#endregion #endregion
@ -127,11 +127,11 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests
[Test] [Test]
[ExpectedException(typeof(FieldNotFoundException))] public void UnknownField_ErrorMessage ()
public void Throw_On_UnknownField ()
{ {
const string expression = "=max(Unknown)"; const string expression = "=max(Unknown)";
Assert.That(this.evaluator.Evaluate(expression), Is.EqualTo(this.testTable.Rows.Count.ToString())); string s = this.evaluator.Evaluate(expression);
Assert.That(s.Contains("not found"));
} }
#endregion #endregion

14
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/IntegrationTests/AggregateFunctionsFromIListFixture.cs

@ -69,11 +69,11 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests
} }
[Test] [Test]
[ExpectedException(typeof(FieldNotFoundException))] public void Unknown_Field_ErrorMessage ()
public void Throw_On_Unknown_Field ()
{ {
const string expression = "=count(unknown)"; const string expression = "=count(unknown)";
Assert.That(this.evaluator.Evaluate(expression), Is.EqualTo(this.aggregateCollection.Count)); string s = this.evaluator.Evaluate(expression);
Assert.That(s.Contains("not found"));
} }
#endregion #endregion
@ -121,14 +121,6 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests
} }
[Test]
[ExpectedException(typeof(FieldNotFoundException))]
public void Throw_On_UnknownField ()
{
const string expression = "=max(Unknown)";
Assert.That(this.evaluator.Evaluate(expression), Is.EqualTo(this.aggregateCollection.Count.ToString()));
}
#endregion #endregion

8
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/IntegrationTests/GlobalFunctions.cs

@ -96,11 +96,12 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests
[Test] [Test]
[ExpectedException(typeof(UnknownFunctionException))] public void UnknownFunction_ErrorMessage()
public void Throw_On_UnknownFunction()
{ {
const string expression = "=TotalWrongFunction()"; const string expression = "=TotalWrongFunction()";
Assert.That(this.evaluator.Evaluate(expression), Is.EqualTo(this.singlePage.TotalPages.ToString())); string s = this.evaluator.Evaluate(expression);
Assert.That(s.Contains("TotalWrongFunction"));
} }
@ -109,7 +110,6 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests
{ {
this.singlePage = TestHelper.CreateSinglePage(); this.singlePage = TestHelper.CreateSinglePage();
this.evaluator = new ExpressionEvaluatorFacade(this.singlePage); this.evaluator = new ExpressionEvaluatorFacade(this.singlePage);
// this.evaluator.SinglePage = this.singlePage;
} }
} }
} }

Loading…
Cancel
Save