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 @@ -37,7 +37,7 @@ namespace ICSharpCode.Reports.Addin
private static int folderClosed = 0;
private static int folderOpen = 1;
private static int clearIcon = 2;
// private static int clearIcon = 2;
private static int ascendingIcon = 4;
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 @@ -258,17 +258,20 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing
public static void EvaluateRow(IExpressionEvaluatorFacade evaluator,ExporterCollection row)
{
// 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);
// textItem.Text = evaluator.Evaluate(textItem.Text);
textItem.Text = s;
try {
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);
textItem.Text = evaluator.Evaluate(textItem.Text);
// textItem.Text = s;
}
}
} catch (Exception e) {
throw e;
}
}
#endregion

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

@ -17,7 +17,7 @@ namespace ICSharpCode.Reports.Core @@ -17,7 +17,7 @@ namespace ICSharpCode.Reports.Core
public class ChildNavigator:IDataNavigator
{
private IndexList indexList;
private IDataViewStrategy dataStore;
private IDataViewStrategy store;
private System.Collections.Generic.List<BaseComparer>.Enumerator ce;
public ChildNavigator(IDataViewStrategy dataStore,IndexList indexList)
@ -25,7 +25,7 @@ namespace ICSharpCode.Reports.Core @@ -25,7 +25,7 @@ namespace ICSharpCode.Reports.Core
if (dataStore == null) {
throw new ArgumentNullException("dataStore");
}
this.dataStore = dataStore;
this.store = dataStore;
this.indexList = indexList;
ce = this.indexList.GetEnumerator();
ce.MoveNext();
@ -42,10 +42,10 @@ namespace ICSharpCode.Reports.Core @@ -42,10 +42,10 @@ namespace ICSharpCode.Reports.Core
get {
IndexList ind = BuildChildList();
return ((ind != null) && (ind.Count > 0));
// return false;
}
}
public int ChildListCount {
get {
throw new NotImplementedException();
@ -58,45 +58,49 @@ namespace ICSharpCode.Reports.Core @@ -58,45 +58,49 @@ namespace ICSharpCode.Reports.Core
}
}
public bool IsGrouped {
get {
throw new NotImplementedException();
}
}
public int CurrentRow {
get {
throw new NotImplementedException();
}
public int CurrentRow
{
get {return this.indexList.CurrentPosition;}
}
public int Count {
get {
return this.indexList.Count;
}
}
public object Current {
get {
TableStrategy t = this.dataStore as TableStrategy;
TableStrategy t = this.store as TableStrategy;
return t.myCurrent(ce.Current.ListIndex);
// return ci;
}
}
public AvailableFieldsCollection AvailableFields {
get {
throw new NotImplementedException();
}
}
public void Fill(ReportItemCollection collection)
{
TableStrategy tableStrategy = dataStore as TableStrategy;
TableStrategy tableStrategy = store as TableStrategy;
foreach (var item in collection) {
IDataItem dataItem = item as IDataItem;
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);
dataItem.DBValue = s.Value.ToString();
}
@ -106,37 +110,31 @@ namespace ICSharpCode.Reports.Core @@ -106,37 +110,31 @@ namespace ICSharpCode.Reports.Core
public bool MoveNext()
{
return this.ce.MoveNext();
this.indexList.CurrentPosition ++;
return this.indexList.CurrentPosition<this.indexList.Count;
}
public void Reset()
{
throw new NotImplementedException();
this.indexList.CurrentPosition = -1;
}
public CurrentItemsCollection GetDataRow()
{
throw new NotImplementedException();
var st= store as TableStrategy;
return st.FillDataRow(this.indexList[CurrentRow].ListIndex);
}
public IDataNavigator GetChildNavigator()
{
var i = BuildChildList();
if ((i == null) || (i.Count == 0)) {
return null;
}
return new ChildNavigator(this.dataStore,i);
}
public void SwitchGroup()
{
throw new NotImplementedException();
return new ChildNavigator(this.store,i);
}
public bool ChildMoveNext()
{
throw new NotImplementedException();
}
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 @@ -37,15 +37,6 @@ namespace ICSharpCode.Reports.Core
#endregion
/*
private static Collection<BaseDataItem> ExtraxtDataItems (ReportItemCollection items)
{
Collection<BaseDataItem> inheritedReportItems = new Collection<BaseDataItem>(items.OfType<BaseDataItem>().ToList());
return inheritedReportItems;
}
*/
#region IDataNavigator implementation
@ -122,14 +113,6 @@ namespace ICSharpCode.Reports.Core @@ -122,14 +113,6 @@ namespace ICSharpCode.Reports.Core
}
}
public void SwitchGroup()
{
this.childList = BuildChildList();
ce = childList.GetEnumerator();
ce.MoveNext();
}
public int ChildListCount
@ -139,13 +122,6 @@ namespace ICSharpCode.Reports.Core @@ -139,13 +122,6 @@ namespace ICSharpCode.Reports.Core
}
}
public bool ChildMoveNext()
{
return ce.MoveNext();
}
// at the moment only tables are working
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 @@ -70,6 +70,8 @@ namespace ICSharpCode.Reports.Core.Exporter
Rectangle pageBreakRect = Rectangle.Empty;
Console.WriteLine("datanav currentrow {0}",base.DataNavigator.CurrentRow);
do {
PrintHelper.AdjustSectionLocation (section);
@ -78,86 +80,27 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -78,86 +80,27 @@ namespace ICSharpCode.Reports.Core.Exporter
// 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);
section.Size = this.SectionBounds.DetailSectionRectangle.Size;
base.SaveSize(section.Items[0].Size);
if (section.Items.IsGrouped) {
base.Evaluator.SinglePage.IDataNavigator = childNavigator;
// Convert Grouping Header
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);
base.DataNavigator.SwitchGroup();
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);
if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds )) {
@ -165,7 +108,9 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -165,7 +108,9 @@ namespace ICSharpCode.Reports.Core.Exporter
currentPosition = CalculateStartPosition ();
}
}
while ( base.DataNavigator.ChildMoveNext());
while ( childNavigator.MoveNext());
base.Evaluator.SinglePage.IDataNavigator = base.DataNavigator;
}
}
else
@ -192,7 +137,7 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -192,7 +137,7 @@ namespace ICSharpCode.Reports.Core.Exporter
return exporterCollection;
}
private Point CalculateStartPosition()
{
return new Point(base.SectionBounds.PageHeaderRectangle.X,base.SectionBounds.PageHeaderRectangle.Y);
@ -209,7 +154,9 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -209,7 +154,9 @@ namespace ICSharpCode.Reports.Core.Exporter
base.DataNavigator.Fill(groupCollection);
base.FireSectionRendering(section);
ExporterCollection list = StandardPrinter.ConvertPlainCollection(groupCollection,offset);
StandardPrinter.EvaluateRow(base.Evaluator,list);
mylist.AddRange(list);
AfterConverting (section,list);
retVal = new Point (leftPos,offset.Y + groupCollection[0].Size.Height + 20 + (3 *GlobalValues.GapBetweenContainer));
@ -218,7 +165,6 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -218,7 +165,6 @@ namespace ICSharpCode.Reports.Core.Exporter
}
return retVal;
}
private Point old_ConvertGroupHeader(ExporterCollection mylist,BaseSection section,ISimpleContainer simpleContainer,int leftPos,Point offset)
@ -227,7 +173,7 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -227,7 +173,7 @@ namespace ICSharpCode.Reports.Core.Exporter
base.DataNavigator.Fill(groupCollection);
base.FireSectionRendering(section);
ExporterCollection list = StandardPrinter.ConvertPlainCollection(groupCollection,offset);
StandardPrinter.EvaluateRow(base.Evaluator,list);
// StandardPrinter.EvaluateRow(base.Evaluator,list);
mylist.AddRange(list);
AfterConverting (section,list);
@ -237,7 +183,6 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -237,7 +183,6 @@ namespace ICSharpCode.Reports.Core.Exporter
private Point ConvertGroupChilds(ExporterCollection mylist, BaseSection section, ISimpleContainer simpleContainer, int defaultLeftPos, Point currentPosition)
{
//base.DataNavigator.FillChild(simpleContainer.Items);
PrepareContainerForConverting(section,simpleContainer);
Point curPos = BaseConverter.BaseConvert(mylist,simpleContainer,defaultLeftPos,currentPosition);
AfterConverting (section,mylist);
@ -249,9 +194,8 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -249,9 +194,8 @@ namespace ICSharpCode.Reports.Core.Exporter
{
base.FillRow(simpleContainer);
PrepareContainerForConverting(section,simpleContainer);
// base.FireSectionRendering(section);
Point curPos = BaseConverter.BaseConvert(mylist,simpleContainer,defaultLeftPos,currentPosition);
// StandardPrinter.EvaluateRow(base.Evaluator,mylist);
StandardPrinter.EvaluateRow(base.Evaluator,mylist);
AfterConverting (section,mylist);
return curPos;
}
@ -259,7 +203,7 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -259,7 +203,7 @@ namespace ICSharpCode.Reports.Core.Exporter
private void AfterConverting (BaseSection section,ExporterCollection mylist)
{
StandardPrinter.EvaluateRow(base.Evaluator,mylist);
// StandardPrinter.EvaluateRow(base.Evaluator,mylist);
section.Items[0].Size = base.RestoreSize;
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; @@ -32,9 +32,6 @@ using System.ComponentModel;
bool HasChildren {get;}
void SwitchGroup();
bool ChildMoveNext();
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; @@ -16,6 +16,7 @@ using NUnit.Framework;
namespace ICSharpCode.Reports.Core.Test.DataManager
{
[TestFixture]
public class GroupTableFixture
{
@ -23,7 +24,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager @@ -23,7 +24,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager
DataTable table;
[Test]
public void GroupingCollection_Empty_IsGrouped_False()
public void GroupingCollection_EmptyGrouping_IsGrouped_False()
{
IDataManager dm = ICSharpCode.Reports.Core.DataManager.CreateInstance(this.table,new ReportSettings());
DataNavigator dataNav = dm.GetNavigator;
@ -35,7 +36,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager @@ -35,7 +36,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager
#region Group by String
[Test]
public void GroupingCollection_Contains_IsGrouped_True()
public void GroupingCollection_ContainsGrouping_IsGrouped_True()
{
var dataNav = PrepareStringGrouping();
Assert.That(dataNav.IsGrouped == true);
@ -112,18 +113,24 @@ namespace ICSharpCode.Reports.Core.Test.DataManager @@ -112,18 +113,24 @@ namespace ICSharpCode.Reports.Core.Test.DataManager
{
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);
}
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)
{
BaseDataItem first= new BaseDataItem("First");
@ -135,7 +142,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager @@ -135,7 +142,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager
ric.Add(first);
ric.Add(last);
ric.Add(datetime);
/*
nav.SwitchGroup();
do {
nav.FillChild(ric);
@ -144,6 +151,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager @@ -144,6 +151,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager
}
}
while ( nav.ChildMoveNext());
*/
}
@ -156,6 +164,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager @@ -156,6 +164,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager
ric.Add(first);
ric.Add(last);
/*
nav.SwitchGroup();
do {
nav.FillChild(ric);
@ -164,6 +173,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager @@ -164,6 +173,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager
}
}
while ( nav.ChildMoveNext());
*/
}
#endregion

Loading…
Cancel
Save