Browse Source

Evaluation in grouped report

pull/1/head
peterforstmeier 15 years ago
parent
commit
7dadb2c562
  1. 2
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportExplorer/ExplorerTree.cs
  2. 21
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/StandardPrinter.cs
  3. 46
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ChildNavigator.cs
  4. 24
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataNavigator.cs
  5. 98
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs
  6. 3
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Interfaces/IDataNavigator.cs
  7. 30
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/GroupTableFixture.cs

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

@ -37,7 +37,7 @@ namespace ICSharpCode.Reports.Addin
private static int folderClosed = 0; private static int folderClosed = 0;
private static int folderOpen = 1; private static int folderOpen = 1;
private static int clearIcon = 2; // private static int clearIcon = 2;
private static int ascendingIcon = 4; private static int ascendingIcon = 4;
private static int descendingIcon = 5; private static int descendingIcon = 5;

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

@ -258,17 +258,20 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing
public static void EvaluateRow(IExpressionEvaluatorFacade evaluator,ExporterCollection row) 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) { try {
ExportText textItem = element as ExportText; foreach (BaseExportColumn element in row) {
ExportText textItem = element as ExportText;
if (textItem != null) { if (textItem != null) {
// string s = evaluator.Evaluate(textItem.Text);
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 = evaluator.Evaluate(textItem.Text); // textItem.Text = s;
textItem.Text = s; }
} }
} catch (Exception e) {
throw e;
} }
} }
#endregion #endregion

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

@ -17,7 +17,7 @@ namespace ICSharpCode.Reports.Core
public class ChildNavigator:IDataNavigator public class ChildNavigator:IDataNavigator
{ {
private IndexList indexList; private IndexList indexList;
private IDataViewStrategy dataStore; private IDataViewStrategy store;
private System.Collections.Generic.List<BaseComparer>.Enumerator ce; private System.Collections.Generic.List<BaseComparer>.Enumerator ce;
public ChildNavigator(IDataViewStrategy dataStore,IndexList indexList) public ChildNavigator(IDataViewStrategy dataStore,IndexList indexList)
@ -25,7 +25,7 @@ namespace ICSharpCode.Reports.Core
if (dataStore == null) { if (dataStore == null) {
throw new ArgumentNullException("dataStore"); throw new ArgumentNullException("dataStore");
} }
this.dataStore = dataStore; this.store = dataStore;
this.indexList = indexList; this.indexList = indexList;
ce = this.indexList.GetEnumerator(); ce = this.indexList.GetEnumerator();
ce.MoveNext(); ce.MoveNext();
@ -42,10 +42,10 @@ namespace ICSharpCode.Reports.Core
get { get {
IndexList ind = BuildChildList(); IndexList ind = BuildChildList();
return ((ind != null) && (ind.Count > 0)); return ((ind != null) && (ind.Count > 0));
// return false;
} }
} }
public int ChildListCount { public int ChildListCount {
get { get {
throw new NotImplementedException(); throw new NotImplementedException();
@ -58,45 +58,49 @@ namespace ICSharpCode.Reports.Core
} }
} }
public bool IsGrouped { public bool IsGrouped {
get { get {
throw new NotImplementedException(); throw new NotImplementedException();
} }
} }
public int CurrentRow {
get { public int CurrentRow
throw new NotImplementedException(); {
} get {return this.indexList.CurrentPosition;}
} }
public int Count { public int Count {
get { get {
return this.indexList.Count; return this.indexList.Count;
} }
} }
public object Current { public object Current {
get { get {
TableStrategy t = this.dataStore as TableStrategy; TableStrategy t = this.store as TableStrategy;
return t.myCurrent(ce.Current.ListIndex); return t.myCurrent(ce.Current.ListIndex);
// return ci;
} }
} }
public AvailableFieldsCollection AvailableFields { public AvailableFieldsCollection AvailableFields {
get { get {
throw new NotImplementedException(); throw new NotImplementedException();
} }
} }
public void Fill(ReportItemCollection collection) public void Fill(ReportItemCollection collection)
{ {
TableStrategy tableStrategy = dataStore as TableStrategy; TableStrategy tableStrategy = store as TableStrategy;
foreach (var item in collection) { foreach (var item in collection) {
IDataItem dataItem = item as IDataItem; IDataItem dataItem = item as IDataItem;
if (dataItem != null) { if (dataItem != null) {
CurrentItemsCollection currentItemsCollection = tableStrategy.FillDataRow(ce.Current.ListIndex); CurrentItemsCollection currentItemsCollection = tableStrategy.FillDataRow(this.indexList[CurrentRow].ListIndex);
CurrentItem s = currentItemsCollection.FirstOrDefault(x => x.ColumnName == dataItem.ColumnName); CurrentItem s = currentItemsCollection.FirstOrDefault(x => x.ColumnName == dataItem.ColumnName);
dataItem.DBValue = s.Value.ToString(); dataItem.DBValue = s.Value.ToString();
} }
@ -106,37 +110,31 @@ namespace ICSharpCode.Reports.Core
public bool MoveNext() public bool MoveNext()
{ {
return this.ce.MoveNext(); this.indexList.CurrentPosition ++;
return this.indexList.CurrentPosition<this.indexList.Count;
} }
public void Reset() public void Reset()
{ {
throw new NotImplementedException(); this.indexList.CurrentPosition = -1;
} }
public CurrentItemsCollection GetDataRow() public CurrentItemsCollection GetDataRow()
{ {
throw new NotImplementedException(); var st= store as TableStrategy;
return st.FillDataRow(this.indexList[CurrentRow].ListIndex);
} }
public IDataNavigator GetChildNavigator() public IDataNavigator GetChildNavigator()
{ {
var i = BuildChildList(); var i = BuildChildList();
if ((i == null) || (i.Count == 0)) { if ((i == null) || (i.Count == 0)) {
return null; return null;
} }
return new ChildNavigator(this.dataStore,i); return new ChildNavigator(this.store,i);
}
public void SwitchGroup()
{
throw new NotImplementedException();
} }
public bool ChildMoveNext()
{
throw new NotImplementedException();
}
public void FillChild(ReportItemCollection collection) public void FillChild(ReportItemCollection collection)
{ {

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

@ -37,15 +37,6 @@ namespace ICSharpCode.Reports.Core
#endregion #endregion
/*
private static Collection<BaseDataItem> ExtraxtDataItems (ReportItemCollection items)
{
Collection<BaseDataItem> inheritedReportItems = new Collection<BaseDataItem>(items.OfType<BaseDataItem>().ToList());
return inheritedReportItems;
}
*/
#region IDataNavigator implementation #region IDataNavigator implementation
@ -122,14 +113,6 @@ namespace ICSharpCode.Reports.Core
} }
} }
public void SwitchGroup()
{
this.childList = BuildChildList();
ce = childList.GetEnumerator();
ce.MoveNext();
}
public int ChildListCount public int ChildListCount
@ -139,13 +122,6 @@ namespace ICSharpCode.Reports.Core
} }
} }
public bool ChildMoveNext()
{
return ce.MoveNext();
}
// at the moment only tables are working // at the moment only tables are working
public void FillChild (ReportItemCollection collection) public void FillChild (ReportItemCollection collection)

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

@ -70,6 +70,8 @@ namespace ICSharpCode.Reports.Core.Exporter
Rectangle pageBreakRect = Rectangle.Empty; Rectangle pageBreakRect = Rectangle.Empty;
Console.WriteLine("datanav currentrow {0}",base.DataNavigator.CurrentRow);
do { do {
PrintHelper.AdjustSectionLocation (section); PrintHelper.AdjustSectionLocation (section);
@ -78,86 +80,27 @@ namespace ICSharpCode.Reports.Core.Exporter
// did we have GroupedItems at all // did we have GroupedItems at all
if (section.Items.IsGrouped) { if (section.Items.IsGrouped) {
// Convert Grouping Header
currentPosition = ConvertGroupHeader(exporterCollection,section,simpleContainer,defaultLeftPos,currentPosition);
// GetType child navigator // GetType child navigator
IDataNavigator childNavigator = base.DataNavigator.GetChildNavigator(); 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);
section.Size = this.SectionBounds.DetailSectionRectangle.Size;
base.SaveSize(section.Items[0].Size);
if (section.Items.IsGrouped) {
base.Evaluator.SinglePage.IDataNavigator = childNavigator;
// Convert Grouping Header // Convert Grouping Header
currentPosition = ConvertGroupHeader(exporterCollection,section,simpleContainer,defaultLeftPos,currentPosition); currentPosition = ConvertGroupHeader(exporterCollection,section,simpleContainer,defaultLeftPos,currentPosition);
//Convert children childNavigator.Reset();
childNavigator.MoveNext();
if (base.DataNavigator.HasChildren) { //Convert children
if (childNavigator != null) {
StandardPrinter.AdjustBackColor(simpleContainer,GlobalValues.DefaultBackColor); StandardPrinter.AdjustBackColor(simpleContainer,GlobalValues.DefaultBackColor);
base.DataNavigator.SwitchGroup();
do { do {
currentPosition = ConvertGroupChilds (exporterCollection,section,simpleContainer,defaultLeftPos,currentPosition); childNavigator.Fill(simpleContainer.Items);
currentPosition = ConvertGroupChilds (exporterCollection,section,
simpleContainer,defaultLeftPos,currentPosition);
pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)section.Items[1],currentPosition); pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)section.Items[1],currentPosition);
if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds )) { if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds )) {
@ -165,7 +108,9 @@ namespace ICSharpCode.Reports.Core.Exporter
currentPosition = CalculateStartPosition (); currentPosition = CalculateStartPosition ();
} }
} }
while ( base.DataNavigator.ChildMoveNext());
while ( childNavigator.MoveNext());
base.Evaluator.SinglePage.IDataNavigator = base.DataNavigator;
} }
} }
else else
@ -192,7 +137,7 @@ namespace ICSharpCode.Reports.Core.Exporter
return exporterCollection; return exporterCollection;
} }
private Point CalculateStartPosition() private Point CalculateStartPosition()
{ {
return new Point(base.SectionBounds.PageHeaderRectangle.X,base.SectionBounds.PageHeaderRectangle.Y); return new Point(base.SectionBounds.PageHeaderRectangle.X,base.SectionBounds.PageHeaderRectangle.Y);
@ -209,7 +154,9 @@ namespace ICSharpCode.Reports.Core.Exporter
base.DataNavigator.Fill(groupCollection); base.DataNavigator.Fill(groupCollection);
base.FireSectionRendering(section); base.FireSectionRendering(section);
ExporterCollection list = StandardPrinter.ConvertPlainCollection(groupCollection,offset); ExporterCollection list = StandardPrinter.ConvertPlainCollection(groupCollection,offset);
StandardPrinter.EvaluateRow(base.Evaluator,list); StandardPrinter.EvaluateRow(base.Evaluator,list);
mylist.AddRange(list); mylist.AddRange(list);
AfterConverting (section,list); AfterConverting (section,list);
retVal = new Point (leftPos,offset.Y + groupCollection[0].Size.Height + 20 + (3 *GlobalValues.GapBetweenContainer)); retVal = new Point (leftPos,offset.Y + groupCollection[0].Size.Height + 20 + (3 *GlobalValues.GapBetweenContainer));
@ -218,7 +165,6 @@ namespace ICSharpCode.Reports.Core.Exporter
} }
return retVal; return retVal;
} }
private Point old_ConvertGroupHeader(ExporterCollection mylist,BaseSection section,ISimpleContainer simpleContainer,int leftPos,Point offset) private Point old_ConvertGroupHeader(ExporterCollection mylist,BaseSection section,ISimpleContainer simpleContainer,int leftPos,Point offset)
@ -227,7 +173,7 @@ namespace ICSharpCode.Reports.Core.Exporter
base.DataNavigator.Fill(groupCollection); base.DataNavigator.Fill(groupCollection);
base.FireSectionRendering(section); base.FireSectionRendering(section);
ExporterCollection list = StandardPrinter.ConvertPlainCollection(groupCollection,offset); ExporterCollection list = StandardPrinter.ConvertPlainCollection(groupCollection,offset);
StandardPrinter.EvaluateRow(base.Evaluator,list); // StandardPrinter.EvaluateRow(base.Evaluator,list);
mylist.AddRange(list); mylist.AddRange(list);
AfterConverting (section,list); AfterConverting (section,list);
@ -237,7 +183,6 @@ namespace ICSharpCode.Reports.Core.Exporter
private Point ConvertGroupChilds(ExporterCollection mylist, BaseSection section, ISimpleContainer simpleContainer, int defaultLeftPos, Point currentPosition) private Point ConvertGroupChilds(ExporterCollection mylist, BaseSection section, ISimpleContainer simpleContainer, int defaultLeftPos, Point currentPosition)
{ {
//base.DataNavigator.FillChild(simpleContainer.Items);
PrepareContainerForConverting(section,simpleContainer); PrepareContainerForConverting(section,simpleContainer);
Point curPos = BaseConverter.BaseConvert(mylist,simpleContainer,defaultLeftPos,currentPosition); Point curPos = BaseConverter.BaseConvert(mylist,simpleContainer,defaultLeftPos,currentPosition);
AfterConverting (section,mylist); AfterConverting (section,mylist);
@ -249,9 +194,8 @@ namespace ICSharpCode.Reports.Core.Exporter
{ {
base.FillRow(simpleContainer); base.FillRow(simpleContainer);
PrepareContainerForConverting(section,simpleContainer); PrepareContainerForConverting(section,simpleContainer);
// base.FireSectionRendering(section);
Point curPos = BaseConverter.BaseConvert(mylist,simpleContainer,defaultLeftPos,currentPosition); Point curPos = BaseConverter.BaseConvert(mylist,simpleContainer,defaultLeftPos,currentPosition);
// StandardPrinter.EvaluateRow(base.Evaluator,mylist); StandardPrinter.EvaluateRow(base.Evaluator,mylist);
AfterConverting (section,mylist); AfterConverting (section,mylist);
return curPos; return curPos;
} }
@ -259,7 +203,7 @@ namespace ICSharpCode.Reports.Core.Exporter
private void AfterConverting (BaseSection section,ExporterCollection mylist) private void AfterConverting (BaseSection section,ExporterCollection mylist)
{ {
StandardPrinter.EvaluateRow(base.Evaluator,mylist); // StandardPrinter.EvaluateRow(base.Evaluator,mylist);
section.Items[0].Size = base.RestoreSize; section.Items[0].Size = base.RestoreSize;
section.SectionOffset += section.Size.Height + 3 * GlobalValues.GapBetweenContainer; section.SectionOffset += section.Size.Height + 3 * GlobalValues.GapBetweenContainer;

3
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Interfaces/IDataNavigator.cs

@ -32,9 +32,6 @@ using System.ComponentModel;
bool HasChildren {get;} bool HasChildren {get;}
void SwitchGroup();
bool ChildMoveNext();
int ChildListCount {get;} int ChildListCount {get;}

30
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/GroupTableFixture.cs

@ -16,6 +16,7 @@ using NUnit.Framework;
namespace ICSharpCode.Reports.Core.Test.DataManager namespace ICSharpCode.Reports.Core.Test.DataManager
{ {
[TestFixture] [TestFixture]
public class GroupTableFixture public class GroupTableFixture
{ {
@ -23,7 +24,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager
DataTable table; DataTable table;
[Test] [Test]
public void GroupingCollection_Empty_IsGrouped_False() public void GroupingCollection_EmptyGrouping_IsGrouped_False()
{ {
IDataManager dm = ICSharpCode.Reports.Core.DataManager.CreateInstance(this.table,new ReportSettings()); IDataManager dm = ICSharpCode.Reports.Core.DataManager.CreateInstance(this.table,new ReportSettings());
DataNavigator dataNav = dm.GetNavigator; DataNavigator dataNav = dm.GetNavigator;
@ -35,7 +36,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager
#region Group by String #region Group by String
[Test] [Test]
public void GroupingCollection_Contains_IsGrouped_True() public void GroupingCollection_ContainsGrouping_IsGrouped_True()
{ {
var dataNav = PrepareStringGrouping(); var dataNav = PrepareStringGrouping();
Assert.That(dataNav.IsGrouped == true); Assert.That(dataNav.IsGrouped == true);
@ -112,18 +113,24 @@ namespace ICSharpCode.Reports.Core.Test.DataManager
{ {
var dataNav = PrepareStringGrouping(); var dataNav = PrepareStringGrouping();
while (dataNav.MoveNext()) { 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);
}
if (dataNav.HasChildren)
{
var n = dataNav.GetChildNavigator();
do
{
Assert.That(dataNav.HasChildren,Is.True);
DataRow r = dataNav.Current as DataRow;
string v2 = r["last"].ToString() + " GroupVal :" + r[3].ToString();
Console.WriteLine(v2);
}
while (n.MoveNext());
}
} }
} }
private void DateTimeChildList (IDataNavigator nav) private void DateTimeChildList (IDataNavigator nav)
{ {
BaseDataItem first= new BaseDataItem("First"); BaseDataItem first= new BaseDataItem("First");
@ -135,7 +142,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager
ric.Add(first); ric.Add(first);
ric.Add(last); ric.Add(last);
ric.Add(datetime); ric.Add(datetime);
/*
nav.SwitchGroup(); nav.SwitchGroup();
do { do {
nav.FillChild(ric); nav.FillChild(ric);
@ -144,6 +151,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager
} }
} }
while ( nav.ChildMoveNext()); while ( nav.ChildMoveNext());
*/
} }
@ -156,6 +164,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager
ric.Add(first); ric.Add(first);
ric.Add(last); ric.Add(last);
/*
nav.SwitchGroup(); nav.SwitchGroup();
do { do {
nav.FillChild(ric); nav.FillChild(ric);
@ -164,6 +173,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager
} }
} }
while ( nav.ChildMoveNext()); while ( nav.ChildMoveNext());
*/
} }
#endregion #endregion

Loading…
Cancel
Save