Skip to content
This repository has been archived by the owner on Oct 16, 2020. It is now read-only.

Commit

Permalink
Change GroupedRowConverter.cs from DataNavigator.SwitchGroup to base.…
Browse files Browse the repository at this point in the history
…DataNavigator.GetChildNavigator()

some small cleanup
  • Loading branch information
PeterForstmeier committed Sep 11, 2010
1 parent 13f7db4 commit 979315e
Show file tree
Hide file tree
Showing 8 changed files with 154 additions and 51 deletions.
Expand Up @@ -168,28 +168,6 @@ public static bool IsPageFull (Rectangle rectangle,SectionBounds bounds)

#endregion

public static IExpressionEvaluatorFacade CreateEvaluator (ISinglePage singlePage,IDataNavigator dataNavigator)
{
if (singlePage == null) {

throw new ArgumentNullException("singlePage");
}
if (dataNavigator == null) {
throw new ArgumentNullException("dataNavigator");
}
IExpressionEvaluatorFacade evaluatorFacade = new ExpressionEvaluatorFacade();
evaluatorFacade.SinglePage = singlePage;
evaluatorFacade.SinglePage.IDataNavigator = dataNavigator;
return evaluatorFacade;
}


public static IExpressionEvaluatorFacade SetupEvaluator ()
{
return new ExpressionEvaluatorFacade();
}


public static Point ConvertRectangleToCurentPosition (Rectangle r)
{
return new Point(r.Left,r.Bottom);
Expand Down
Expand Up @@ -232,16 +232,39 @@ public static ExportContainer ConvertToContainer (ISimpleContainer item,Point of

#region Evaluate


public static IExpressionEvaluatorFacade SetupEvaluator ()
{
return new ExpressionEvaluatorFacade();
}


public static IExpressionEvaluatorFacade CreateEvaluator (ISinglePage singlePage,IDataNavigator dataNavigator)
{
if (singlePage == null) {

throw new ArgumentNullException("singlePage");
}
if (dataNavigator == null) {
throw new ArgumentNullException("dataNavigator");
}
IExpressionEvaluatorFacade evaluatorFacade = new ExpressionEvaluatorFacade();
evaluatorFacade.SinglePage = singlePage;
evaluatorFacade.SinglePage.IDataNavigator = dataNavigator;
return evaluatorFacade;
}


public static void EvaluateRow(IExpressionEvaluatorFacade evaluator,ExporterCollection row)
{
Console.WriteLine("evaluate row with row:{0} ",evaluator.SinglePage.IDataNavigator.CurrentRow);
// Console.WriteLine("evaluate row with row:{0} ",evaluator.SinglePage.IDataNavigator.CurrentRow);
foreach (BaseExportColumn element in row) {
ExportText textItem = element as ExportText;

if (textItem != null) {

string s = evaluator.Evaluate(textItem.Text);
Console.WriteLine("\teval {0} - {1} ",textItem.Text,s);
// Console.WriteLine("\teval {0} - {1} ",textItem.Text,s);
// textItem.Text = evaluator.Evaluate(textItem.Text);
textItem.Text = s;
}
Expand Down
Expand Up @@ -7,6 +7,7 @@
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Linq;

namespace ICSharpCode.Reports.Core
{
Expand All @@ -15,22 +16,22 @@ namespace ICSharpCode.Reports.Core
/// </summary>
public class ChildNavigator:IDataNavigator
{
IndexList indexList;
IDataViewStrategy dataStore;
private System.Collections.Generic.List<BaseComparer>.Enumerator ce;
private IndexList indexList;
private IDataViewStrategy dataStore;
private System.Collections.Generic.List<BaseComparer>.Enumerator ce;

public ChildNavigator(IDataViewStrategy dataStore,IndexList indexList)
{
if (dataStore == null) {

if (dataStore == null) {
throw new ArgumentNullException("dataStore");
}
}
this.dataStore = dataStore;
this.indexList = indexList;
ce = this.indexList.GetEnumerator();
ce.MoveNext();
}


public bool HasMoreData {
get {
throw new NotImplementedException();
Expand Down Expand Up @@ -91,7 +92,16 @@ public ChildNavigator(IDataViewStrategy dataStore,IndexList indexList)

public void Fill(ReportItemCollection collection)
{
throw new NotImplementedException();
TableStrategy tableStrategy = dataStore as TableStrategy;
foreach (var item in collection) {
IDataItem dataItem = item as IDataItem;
if (dataItem != null) {
CurrentItemsCollection currentItemsCollection = tableStrategy.FillDataRow(ce.Current.ListIndex);
CurrentItem s = currentItemsCollection.FirstOrDefault(x => x.ColumnName == dataItem.ColumnName);
dataItem.DBValue = s.Value.ToString();
}

}
}

public bool MoveNext()
Expand Down
Expand Up @@ -17,7 +17,11 @@ namespace ICSharpCode.Reports.Core
/// </summary>
public class DataNavigator :IDataNavigator
{

private IDataViewStrategy store;
private IndexList childList;
private System.Collections.Generic.List<BaseComparer>.Enumerator ce;


public DataNavigator(IDataViewStrategy store){
this.store = store;
Expand All @@ -41,6 +45,8 @@ private static Collection<BaseDataItem> ExtraxtDataItems (ReportItemCollection i
}
*/


#region IDataNavigator implementation

public void Fill (ReportItemCollection collection) {
Expand Down Expand Up @@ -117,9 +123,6 @@ public bool HasChildren
}


IndexList childList;
private System.Collections.Generic.List<BaseComparer>.Enumerator ce;

public void SwitchGroup()
{
this.childList = BuildChildList();
Expand Down
Expand Up @@ -53,7 +53,7 @@ public class BaseConverter:IBaseConverter
this.dataNavigator = dataNavigator;
this.sectionBounds = this.singlePage.SectionBounds;
this.layouter = layouter;
this.evaluator = PrintHelper.CreateEvaluator(this.singlePage,this.dataNavigator);
this.evaluator = StandardPrinter.CreateEvaluator(this.singlePage,this.dataNavigator);
}


Expand Down
Expand Up @@ -70,6 +70,73 @@ private ExporterCollection ConvertDataRow (ISimpleContainer simpleContainer)

Rectangle pageBreakRect = Rectangle.Empty;

do {

PrintHelper.AdjustSectionLocation (section);
section.Size = this.SectionBounds.DetailSectionRectangle.Size;
base.SaveSize(section.Items[0].Size);

// did we have GroupedItems at all
if (section.Items.IsGrouped) {
// Convert Grouping Header
currentPosition = ConvertGroupHeader(exporterCollection,section,simpleContainer,defaultLeftPos,currentPosition);

// GetType child navigator
IDataNavigator childNavigator = base.DataNavigator.GetChildNavigator();
Console.WriteLine("child has {0} items",childNavigator.Count);

//Convert children
if (childNavigator != null) {
StandardPrinter.AdjustBackColor(simpleContainer,GlobalValues.DefaultBackColor);
//base.DataNavigator.SwitchGroup();
do {
childNavigator.Fill(simpleContainer.Items);
currentPosition = ConvertGroupChilds (exporterCollection,section,simpleContainer,defaultLeftPos,currentPosition);
pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)section.Items[1],currentPosition);

if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds )) {
base.BuildNewPage(exporterCollection,section);
currentPosition = CalculateStartPosition ();
}
}
while ( childNavigator.MoveNext());
}
}
else
{
// No Grouping at all
currentPosition = ConvertStandardRow (exporterCollection,section,simpleContainer,defaultLeftPos,currentPosition);
}

pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)section.Items[0],currentPosition);
if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds)) {
base.BuildNewPage(exporterCollection,section);
currentPosition = CalculateStartPosition();
}

ShouldDrawBorder (section,exporterCollection);

}
while (base.DataNavigator.MoveNext());

SectionBounds.ReportFooterRectangle = new Rectangle(SectionBounds.ReportFooterRectangle.Left,
section.Location.Y + section.Size.Height,
SectionBounds.ReportFooterRectangle.Width,
SectionBounds.ReportFooterRectangle.Height);
return exporterCollection;
}


private ExporterCollection old_ConvertDataRow (ISimpleContainer simpleContainer)
{
ExporterCollection exporterCollection = new ExporterCollection();
Point currentPosition = new Point(base.SectionBounds.DetailStart.X,base.SectionBounds.DetailStart.Y);
BaseSection section = parent as BaseSection;

int defaultLeftPos = parent.Location.X;

Rectangle pageBreakRect = Rectangle.Empty;

do {

PrintHelper.AdjustSectionLocation (section);
Expand Down Expand Up @@ -126,12 +193,6 @@ private ExporterCollection ConvertDataRow (ISimpleContainer simpleContainer)
}


// private Point PerformPageBreak (ExporterCollection exporterCollection,BaseSection section)
// {
// BuildNewPage(exporterCollection,section);
// return CalculateStartPosition();
// }
//
private Point CalculateStartPosition()
{
return new Point(base.SectionBounds.PageHeaderRectangle.X,base.SectionBounds.PageHeaderRectangle.Y);
Expand Down Expand Up @@ -176,7 +237,7 @@ private Point old_ConvertGroupHeader(ExporterCollection mylist,BaseSection secti

private Point ConvertGroupChilds(ExporterCollection mylist, BaseSection section, ISimpleContainer simpleContainer, int defaultLeftPos, Point currentPosition)
{
base.DataNavigator.FillChild(simpleContainer.Items);
//base.DataNavigator.FillChild(simpleContainer.Items);
PrepareContainerForConverting(section,simpleContainer);
Point curPos = BaseConverter.BaseConvert(mylist,simpleContainer,defaultLeftPos,currentPosition);
AfterConverting (section,mylist);
Expand Down
Expand Up @@ -89,7 +89,7 @@ private void Init()
this.reportDocument.RenderPageEnd += new EventHandler<ReportPageEventArgs> (PrintPageFooter);
this.reportDocument.RenderReportEnd += new EventHandler<ReportPageEventArgs> (PrintReportFooter);

this.Evaluator = PrintHelper.SetupEvaluator();
this.Evaluator = StandardPrinter.SetupEvaluator();
}


Expand Down Expand Up @@ -262,6 +262,7 @@ private void CalculatePageBounds ()

internal virtual void ReportQueryPage (object sender,QueryPageSettingsEventArgs qpea)
{

qpea.PageSettings.Margins = new Margins(reportSettings.LeftMargin,reportSettings.RightMargin,reportSettings.TopMargin,reportSettings.BottomMargin);
bool firstPage;
if (this.currentPageNumber == 0) {
Expand All @@ -270,10 +271,11 @@ internal virtual void ReportQueryPage (object sender,QueryPageSettingsEventArgs
firstPage = false;
}
this.currentPageNumber ++;
ISinglePage sp = new SinglePage(new SectionBounds (reportSettings,firstPage),0);
PrintHelper.InitPage(sp,this.reportSettings);
sp.PageNumber = this.currentPageNumber;
reportDocument.SinglePage = sp;

ISinglePage singlePage = new SinglePage(new SectionBounds (reportSettings,firstPage),0);
PrintHelper.InitPage(singlePage,this.reportSettings);
singlePage.PageNumber = this.currentPageNumber;
reportDocument.SinglePage = singlePage;
}


Expand Down
Expand Up @@ -170,30 +170,56 @@ private void FillChildList (IDataNavigator nav)


#region Try make recursive with ChildNavigator
/*
public void Can_FillChild()
{
var dataNav = PrepareStringGrouping();
while (dataNav.MoveNext()) {
if (dataNav.HasChildren) {
Assert.That(dataNav.HasChildren,Is.True);
DataRow r = dataNav.Current as DataRow;
string v2 = r["last"].ToString() + " GroupVal :" + r[3].ToString();
Console.WriteLine(v2);
FillChildList(dataNav);
}
}
}
*/

[Test]
public void Can_Get_ChildNavigator ()
{
Console.WriteLine("Start Recusive Version");
var dataNav = PrepareStringGrouping();

while (dataNav.MoveNext()) {
if (dataNav.HasChildren) {
DataRow r = dataNav.Current as DataRow;


IDataNavigator child = dataNav.GetChildNavigator();
string v2 = r["last"].ToString() + " GroupVal :" + r[3].ToString() ;
Console.WriteLine(v2);
Assert.That (child,Is.Not.Null);
reccall(child);
}
}
Console.WriteLine("End Recusive Version");
}


[Test]
public void RecursiveCall_Childs ()
{
var dataNav = PrepareStringGrouping();
dataNav.MoveNext();
Console.WriteLine("--------------start rec ------------");
reccall (dataNav);
var dataNav = PrepareStringGrouping();
dataNav.MoveNext();
Console.WriteLine("--------------start rec ------------");
reccall (dataNav);
Console.WriteLine("--------------end rec ------------");
}


private void reccall (IDataNavigator startNavigator)
{
do
Expand Down

0 comments on commit 979315e

Please sign in to comment.