Browse Source

Refactor DataRenderer to show groupings

pull/2/head
peterforstmeier 15 years ago
parent
commit
1deff73d2b
  1. 3
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportExplorer/ExplorerTree.cs
  2. 2
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj
  3. 1
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataManager.cs
  4. 3
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs
  5. 2
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Compilation/Functions/AggregateFunctions/AggregateFunction.cs
  6. 3
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Compilation/Functions/ReportingService/FieldReference.cs
  7. 18
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Interfaces/IItemConverter.cs
  8. 4
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/AbstractDataRenderer.cs
  9. 17
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/RenderDataReport.cs
  10. 230
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/RenderTable.cs
  11. 38
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/RendererFactory.cs

3
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportExplorer/ExplorerTree.cs

@ -337,7 +337,6 @@ namespace ICSharpCode.Reports.Addin
} }
public void BuildTree () public void BuildTree ()
{ {
this.BeginUpdate(); this.BeginUpdate();
@ -345,10 +344,12 @@ namespace ICSharpCode.Reports.Addin
SetSortColumns(); SetSortColumns();
SetGroupColumns(); SetGroupColumns();
SetParameters(); SetParameters();
// SetFunctions();
this.ExpandAll(); this.ExpandAll();
this.EndUpdate(); this.EndUpdate();
} }
#endregion #endregion
#region Build Basic Tree #region Build Basic Tree

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

@ -272,7 +272,9 @@
<Compile Include="Project\Printing\Graphics\RectangleShape.cs" /> <Compile Include="Project\Printing\Graphics\RectangleShape.cs" />
<Compile Include="Project\Printing\AbstractRenderer.cs" /> <Compile Include="Project\Printing\AbstractRenderer.cs" />
<Compile Include="Project\Printing\RenderDataReport.cs" /> <Compile Include="Project\Printing\RenderDataReport.cs" />
<Compile Include="Project\Printing\RendererFactory.cs" />
<Compile Include="Project\Printing\RenderFormSheetReport.cs" /> <Compile Include="Project\Printing\RenderFormSheetReport.cs" />
<Compile Include="Project\Printing\RenderTable.cs" />
<Compile Include="Project\Printing\ReportDocument.cs"> <Compile Include="Project\Printing\ReportDocument.cs">
<SubType>Component</SubType> <SubType>Component</SubType>
</Compile> </Compile>

1
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataManager.cs

@ -64,7 +64,6 @@ namespace ICSharpCode.Reports.Core {
} }
} }
#endregion #endregion

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

@ -157,10 +157,11 @@ namespace ICSharpCode.Reports.Core.Exporter
} }
public ExporterPage SinglePage { public ISinglePage SinglePage {
get { return singlePage; } get { return singlePage; }
} }
public SectionBounds SectionBounds { public SectionBounds SectionBounds {
get { return sectionBounds; } get { return sectionBounds; }
} }

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

@ -126,7 +126,7 @@ namespace SimpleExpressionEvaluator.Compilation.Functions.AggregateFunctions
} }
} 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/Expressions/SimpleExpressionEvaluator/Compilation/Functions/ReportingService/FieldReference.cs

@ -40,8 +40,7 @@ namespace SimpleExpressionEvaluator.Compilation.Functions.ReportingService
if (item != null) { if (item != null) {
retval = item.Value.ToString(); retval = item.Value.ToString();
} else { } else {
retval= String.Format(System.Globalization.CultureInfo.InvariantCulture, retval = GlobalValues.UnkownFunctionMessage(variable.VariableName);
"!! Can't find <{0}> !! ",variable.VariableName);
} }
return retval; return retval;
} }

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

@ -6,22 +6,34 @@ using System.Drawing;
using ICSharpCode.Reports.Core.BaseClasses; using ICSharpCode.Reports.Core.BaseClasses;
using ICSharpCode.Reports.Core.Events; using ICSharpCode.Reports.Core.Events;
using ICSharpCode.Reports.Core.Exporter; using ICSharpCode.Reports.Core.Exporter;
using ICSharpCode.Reports.Expressions.ReportingLanguage;
namespace ICSharpCode.Reports.Core.Interfaces namespace ICSharpCode.Reports.Core.Interfaces
{ {
/// <summary> /// <summary>
/// Description of IItemConverter. /// Description of IItemConverter.
/// </summary> /// </summary>
public interface IBaseConverter ///
public interface IRenderer
{ {
ExporterCollection Convert (BaseReportItem parent,BaseReportItem item);
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;}
ExporterPage SinglePage {get;} ISinglePage SinglePage {get;}
ILayouter Layouter {get;} ILayouter Layouter {get;}
Graphics Graphics {get;set;} Graphics Graphics {get;set;}
} }
public interface IBaseRenderer
{
void Render(ISimpleContainer container,ReportPageEventArgs rpea,IExpressionEvaluatorFacade evaluator);
}
public interface IBaseConverter:IRenderer
{
ExporterCollection Convert (BaseReportItem parent,BaseReportItem item);
}
} }

4
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/AbstractDataRenderer.cs

@ -86,9 +86,7 @@ namespace ICSharpCode.Reports.Core
Rectangle r = StandardPrinter.RenderContainer(row,Evaluator,currentPosition,rpea); Rectangle r = StandardPrinter.RenderContainer(row,Evaluator,currentPosition,rpea);
currentPosition =PrintHelper.ConvertRectangleToCurentPosition (r); currentPosition = PrintHelper.ConvertRectangleToCurentPosition (r);
// currentPosition = new Point(parent.Location.X + row.Location.X,currentPosition.Y);
tableContainer.Location = saveLocation; tableContainer.Location = saveLocation;
Console.WriteLine("----"); Console.WriteLine("----");

17
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/RenderDataReport.cs

@ -158,9 +158,16 @@ namespace ICSharpCode.Reports.Core {
ITableContainer tableContainer = base.CurrentSection.Items[0] as ITableContainer; ITableContainer tableContainer = base.CurrentSection.Items[0] as ITableContainer;
IBaseRenderer r = PrintRendererFactory.CreateRenderer(base.CurrentSection.Items[0],nav,base.SinglePage,base.Layout,CurrentSection);
if ( r != null) {
// r.Render(tableContainer,rpea,Evaluator);
}
// branch to render table's etc // branch to render table's etc
if (tableContainer != null) if (tableContainer != null)
{ {
tableContainer.DataNavigator = nav; tableContainer.DataNavigator = nav;
tableContainer.Parent = base.CurrentSection; tableContainer.Parent = base.CurrentSection;
if (rpea.SinglePage.PageNumber == 1) { if (rpea.SinglePage.PageNumber == 1) {
@ -175,7 +182,8 @@ namespace ICSharpCode.Reports.Core {
this.ReportDocument.DetailsDone = true; this.ReportDocument.DetailsDone = true;
} }
else { else
{
// first element // first element
if (base.SinglePage.PageNumber ==1) { if (base.SinglePage.PageNumber ==1) {
@ -212,13 +220,6 @@ namespace ICSharpCode.Reports.Core {
} }
} }
// if (this.dataNavigator.CurrentRow % 2 == 0) {
// PrintHelper.DebugRectangle(rpea.PrintPageEventArgs.Graphics,r);
// }
base.CurrentSection.SectionOffset = currentPosition.Y; base.CurrentSection.SectionOffset = currentPosition.Y;
rpea.LocationAfterDraw = new Point (rpea.LocationAfterDraw.X, rpea.LocationAfterDraw = new Point (rpea.LocationAfterDraw.X,

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

@ -0,0 +1,230 @@
/*
* Created by SharpDevelop.
* User: Peter Forstmeier
* Date: 10.10.2010
* Time: 17:37
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Drawing;
using ICSharpCode.Reports.Core.BaseClasses.Printing;
using ICSharpCode.Reports.Core.Interfaces;
using ICSharpCode.Reports.Expressions.ReportingLanguage;
namespace ICSharpCode.Reports.Core
{
/// <summary>
/// Description of RenderTable.
/// </summary>
public class RenderTable:IBaseRenderer
{
IDataNavigator dataNavigator;
Rectangle parentRectangle;
ISinglePage singlePage;
ILayouter layouter;
ReportPageEventArgs reportPageEventArgs;
BaseSection currentSection;
public RenderTable(IDataNavigator datanavigator,Rectangle parentRectangle,ISinglePage singlePage,ILayouter layouter,BaseSection section)
{
this.dataNavigator = datanavigator;
this.parentRectangle = parentRectangle;
this.singlePage = singlePage;
this.layouter = layouter;
this.currentSection = section;
}
public event EventHandler<ICSharpCode.Reports.Core.Events.NewPageEventArgs> PageFull;
public event EventHandler<SectionRenderEventArgs> SectionRendering;
public void Render (ISimpleContainer table,ReportPageEventArgs rpea,IExpressionEvaluatorFacade evaluator)
{
if (this.dataNavigator.CurrentRow < 0 ) {
this.dataNavigator.MoveNext();
}
this.reportPageEventArgs = rpea;
Point saveLocation = table.Location;
Rectangle pageBreakRect = Rectangle.Empty;
Point currentPosition = new Point(PrintHelper.DrawingAreaRelativeToParent(this.currentSection,table).Location.X,
this.currentSection.Location.Y);
table.Items.SortByLocation();
Size rs = Size.Empty;
ISimpleContainer headerRow = null;
var simpleContainer = table.Items[0] as ISimpleContainer;
// foreach (BaseRowItem row in table.Items)
// {
rs = simpleContainer.Size;
PrintHelper.AdjustParent(table as BaseReportItem,table.Items);
// if (PrintHelper.IsTextOnlyRow(simpleContainer) )
// {
PrintHelper.SetLayoutForRow(ReportPageEventArgs.PrintPageEventArgs.Graphics,Layouter,simpleContainer);
var r = StandardPrinter.RenderContainer(simpleContainer,evaluator,currentPosition,ReportPageEventArgs);
currentPosition = PrintHelper.ConvertRectangleToCurentPosition (r);
table.Location = saveLocation;
// }
// else {
//---------------
simpleContainer = table.Items[1] as ISimpleContainer;
int adjust = simpleContainer.Location.Y - saveLocation.Y;
simpleContainer.Location = new Point(simpleContainer.Location.X,simpleContainer.Location.Y - adjust - 3 * GlobalValues.GapBetweenContainer);
rs = simpleContainer.Size;
do {
pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)table,currentPosition);
if (PrintHelper.IsPageFull(pageBreakRect,this.SectionBounds)) {
Console.WriteLine("PageBreak - PageFull");
table.Location = saveLocation;
AbstractRenderer.PageBreak(ReportPageEventArgs);
return;
}
this.dataNavigator.Fill(simpleContainer.Items);
PrintHelper.SetLayoutForRow(ReportPageEventArgs.PrintPageEventArgs.Graphics,Layouter,simpleContainer);
r = StandardPrinter.RenderContainer(simpleContainer,evaluator,currentPosition,ReportPageEventArgs);
currentPosition = PrintHelper.ConvertRectangleToCurentPosition (r);
simpleContainer.Size = rs;
}
while (this.dataNavigator.MoveNext());
//-----
// }
}
public void old_Render (ISimpleContainer table,ReportPageEventArgs rpea,IExpressionEvaluatorFacade evaluator)
{
if (this.dataNavigator.CurrentRow < 0 ) {
this.dataNavigator.MoveNext();
}
this.reportPageEventArgs = rpea;
Point saveLocation = table.Location;
Rectangle pageBreakRect = Rectangle.Empty;
Point currentPosition = new Point(PrintHelper.DrawingAreaRelativeToParent(this.currentSection,table).Location.X,
this.currentSection.Location.Y);
table.Items.SortByLocation();
Size rs = Size.Empty;
foreach (BaseRowItem row in table.Items)
{
rs = row.Size;
PrintHelper.AdjustParent(table as BaseReportItem,table.Items);
if (PrintHelper.IsTextOnlyRow(row) )
{
PrintHelper.SetLayoutForRow(ReportPageEventArgs.PrintPageEventArgs.Graphics,Layouter,row);
Rectangle r = StandardPrinter.RenderContainer(row,evaluator,currentPosition,ReportPageEventArgs);
currentPosition = PrintHelper.ConvertRectangleToCurentPosition (r);
table.Location = saveLocation;
}
else {
int adjust = row.Location.Y - saveLocation.Y;
row.Location = new Point(row.Location.X,row.Location.Y - adjust - 3 * GlobalValues.GapBetweenContainer);
rs = row.Size;
do {
pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)table,currentPosition);
if (PrintHelper.IsPageFull(parentRectangle,this.SectionBounds)) {
Console.WriteLine("PageBreak - PageFull");
table.Location = saveLocation;
AbstractRenderer.PageBreak(ReportPageEventArgs);
return;
}
this.dataNavigator.Fill(row.Items);
PrintHelper.SetLayoutForRow(ReportPageEventArgs.PrintPageEventArgs.Graphics,Layouter,row);
Rectangle r = StandardPrinter.RenderContainer(row,evaluator,currentPosition,ReportPageEventArgs);
currentPosition = PrintHelper.ConvertRectangleToCurentPosition (r);
row.Size = rs;
}
while (this.dataNavigator.MoveNext());
}
row.Size = rs;
}
// base.NotifyAfterPrint (rpea.LocationAfterDraw);
}
public ICSharpCode.Reports.Core.BaseClasses.SectionBounds SectionBounds {
get {
return this.singlePage.SectionBounds;
}
}
public IDataNavigator DataNavigator {
get {
return this.dataNavigator;
}
}
public System.Drawing.Rectangle ParentRectangle {
get {
return this.parentRectangle;
}
}
public ISinglePage SinglePage {
get {
return this.singlePage;
}
}
public ILayouter Layouter {
get {
return this.layouter;
}
}
public System.Drawing.Graphics Graphics {get;set;}
public ReportPageEventArgs ReportPageEventArgs {
get { return reportPageEventArgs; }
set { reportPageEventArgs = value; }
}
}
}

38
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Printing/RendererFactory.cs

@ -0,0 +1,38 @@
/*
* Created by SharpDevelop.
* User: Peter Forstmeier
* Date: 10.10.2010
* Time: 17:28
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Drawing;
using ICSharpCode.Reports.Core.Interfaces;
namespace ICSharpCode.Reports.Core
{
/// <summary>
/// Description of RendererFactory.
/// </summary>
public class PrintRendererFactory
{
public static IBaseRenderer CreateRenderer (BaseReportItem itemToConvert,IDataNavigator dataNavigator,
ISinglePage singlePage,ILayouter layouter,BaseSection section)
{
Type t = itemToConvert.GetType();
if (t.Equals(typeof(BaseTableItem))) {
Console.WriteLine("render Table");
return new RenderTable(dataNavigator,Rectangle.Empty,singlePage,layouter,section);
}
if (t.Equals(typeof(BaseRowItem))) {
// return new GroupedRowConverter (dataNavigator,singlePage,layouter);
Console.WriteLine("render Row");
}
return null;
}
}
}
Loading…
Cancel
Save