Browse Source

Print Report with GroupHeader

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/reports@6418 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
pull/1/head
Peter Forstmeier 16 years ago
parent
commit
f93debc659
  1. 1
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/PrintHelper.cs
  2. 51
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Collections/Collections.cs
  3. 55
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs
  4. 25
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/Collections/ReportItemCollectionFixture.cs

1
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/PrintHelper.cs

@ -28,7 +28,6 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing @@ -28,7 +28,6 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing
public static void SetLayoutForRow (Graphics graphics, ILayouter layouter,ISimpleContainer row)
{
// BaseReportItem item = row as BaseReportItem;
Rectangle textRect = layouter.Layout(graphics,row);
if (textRect.Height > row.Size.Height) {
row.Size = new Size(row.Size.Width,textRect.Height);

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

@ -10,8 +10,9 @@ using System.Collections.Generic; @@ -10,8 +10,9 @@ using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Globalization;
using System.Linq;
using ICSharpCode.Reports.Core;
using ICSharpCode.Reports.Core.Exporter;
using ICSharpCode.Reports.Core.Interfaces;
namespace ICSharpCode.Reports.Core{
@ -60,8 +61,6 @@ namespace ICSharpCode.Reports.Core{ @@ -60,8 +61,6 @@ namespace ICSharpCode.Reports.Core{
///</summary>
public class ReportItemCollection : Collection<BaseReportItem>
{
public event EventHandler<CollectionChangedEventArgs<BaseReportItem>> Added;
public event EventHandler<CollectionChangedEventArgs<BaseReportItem>> Removed;
// Trick to get the inner list as List<T> (InnerList always has that type because we only use
// the parameterless constructor on Collection<T>)
@ -143,7 +142,6 @@ namespace ICSharpCode.Reports.Core{ @@ -143,7 +142,6 @@ namespace ICSharpCode.Reports.Core{
protected override void InsertItem(int index, BaseReportItem item)
{
base.InsertItem(index, item);
this.OnAdded (item);
}
@ -151,20 +149,45 @@ namespace ICSharpCode.Reports.Core{ @@ -151,20 +149,45 @@ namespace ICSharpCode.Reports.Core{
{
BaseReportItem item = this[index];
base.RemoveItem(index);
this.OnRemoved(item);
}
#region Grouphandling
public bool HasGroupColumns
{
get {
return CreateGroupedList().Count > 0;
}
}
void OnAdded(BaseReportItem item){
if (Added != null)
Added(this, new CollectionChangedEventArgs<BaseReportItem>(item));
private Collection<BaseGroupItem> 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;
}
void OnRemoved( BaseReportItem item){
if (Removed != null)
Removed(this, new CollectionChangedEventArgs<BaseReportItem>(item));
public ReportItemCollection ExtractGroupedColumns ()
{
Collection<BaseGroupItem> inheritedReportItems = CreateGroupedList();
ReportItemCollection r = new ReportItemCollection();
r.AddRange(inheritedReportItems);
return r;
}
#endregion
}
/// <summary>
@ -203,7 +226,7 @@ namespace ICSharpCode.Reports.Core{ @@ -203,7 +226,7 @@ namespace ICSharpCode.Reports.Core{
{
}
public AbstractColumn Find (string columnName)
public new AbstractColumn Find (string columnName)
{
if (String.IsNullOrEmpty(columnName)) {
throw new ArgumentNullException("columnName");
@ -225,7 +248,7 @@ namespace ICSharpCode.Reports.Core{ @@ -225,7 +248,7 @@ namespace ICSharpCode.Reports.Core{
/// The Culture is used for direct String Comparison
/// </summary>
public static CultureInfo Culture
public new static CultureInfo Culture
{
get { return CultureInfo.CurrentCulture;}
}
@ -239,7 +262,7 @@ namespace ICSharpCode.Reports.Core{ @@ -239,7 +262,7 @@ namespace ICSharpCode.Reports.Core{
{
}
public AbstractColumn Find (string columnName)
public new AbstractColumn Find (string columnName)
{
if (String.IsNullOrEmpty(columnName)) {
throw new ArgumentNullException("columnName");

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

@ -28,10 +28,8 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -28,10 +28,8 @@ namespace ICSharpCode.Reports.Core.Exporter
private BaseReportItem parent;
public RowConverter(IDataNavigator dataNavigator,
ExporterPage singlePage,
ILayouter layouter):base(dataNavigator,singlePage,layouter)
{
ExporterPage singlePage, ILayouter layouter):base(dataNavigator,singlePage,layouter)
{
}
public override ExporterCollection Convert(BaseReportItem parent, BaseReportItem item)
@ -78,21 +76,17 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -78,21 +76,17 @@ namespace ICSharpCode.Reports.Core.Exporter
// Grouping Header
if (base.DataNavigator.HasChildren)
if (section.Items.HasGroupColumns) {
currentPosition = TestDecorateElement(mylist,section,simpleContainer,defaultLeftPos,currentPosition);
}
else
{
TestDecorateElement(simpleContainer);
base.FillRow(simpleContainer);
PrepareContainerForConverting(simpleContainer);
base.FireSectionRendering(section);
StandardPrinter.EvaluateRow(base.Evaluator,mylist);
currentPosition = BaseConverter.BaseConvert(mylist,simpleContainer,defaultLeftPos,currentPosition);
}
// Collection<BaseGroupItem> inheritedReportItems = new Collection<BaseGroupItem>(simpleContainer.Items.OfType<BaseGroupItem>().ToList());
base.FillRow(simpleContainer);
PrepareContainerForConverting(simpleContainer);
base.FireSectionRendering(section);
StandardPrinter.EvaluateRow(base.Evaluator,mylist);
currentPosition = BaseConverter.BaseConvert(mylist,simpleContainer,defaultLeftPos,currentPosition);
AfterConverting (section);
// Grouping Items ----------------------
@ -105,6 +99,7 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -105,6 +99,7 @@ namespace ICSharpCode.Reports.Core.Exporter
((BaseReportItem)simpleContainer).BackColor = color;
base.DataNavigator.FillChild(simpleContainer.Items);
PrepareContainerForConverting(simpleContainer);
base.FireSectionRendering(section);
@ -150,7 +145,31 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -150,7 +145,31 @@ namespace ICSharpCode.Reports.Core.Exporter
}
private Color TestDecorateElement(ISimpleContainer simpleContainer)
private Point TestDecorateElement(ExporterCollection mylist,BaseSection section,ISimpleContainer simpleContainer,int leftPos,Point offset)
{
/*
base.FillRow(simpleContainer);
PrepareContainerForConverting(simpleContainer);
base.FireSectionRendering(section);
StandardPrinter.EvaluateRow(base.Evaluator,mylist);
// currentPosition = BaseConverter.BaseConvert(mylist,simpleContainer,defaultLeftPos,currentPosition);
*/
var groupCollection = section.Items.ExtractGroupedColumns();
base.DataNavigator.Fill(groupCollection);
base.FireSectionRendering(section);
StandardPrinter.EvaluateRow(base.Evaluator,mylist);
ExporterCollection list = StandardPrinter.ConvertPlainCollection(groupCollection,offset);
mylist.AddRange(list);
return new Point (leftPos,offset.Y + groupCollection[0].Size.Height + 20 + (3 *GlobalValues.GapBetweenContainer));
}
private Color old_TestDecorateElement(ISimpleContainer simpleContainer)
{
BaseReportItem i = simpleContainer as BaseReportItem;
var retval = i.BackColor;

25
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/Collections/ReportItemCollectionFixture.cs

@ -19,7 +19,6 @@ namespace ICSharpCode.Reports.Core.Test.Basics @@ -19,7 +19,6 @@ namespace ICSharpCode.Reports.Core.Test.Basics
{
private ReportItemCollection itemCollection;
private bool gotEvent;
[Test]
@ -74,27 +73,18 @@ namespace ICSharpCode.Reports.Core.Test.Basics @@ -74,27 +73,18 @@ namespace ICSharpCode.Reports.Core.Test.Basics
public void InsertOneItem ()
{
itemCollection = this.PlainCollection();
itemCollection.Added += OnItemAdded;
int len = itemCollection.Count();
BaseReportItem r = new BaseReportItem();
r.Name = "Inserted";
itemCollection.Insert(1,r);
Assert.AreEqual (len + 1,itemCollection.Count());
Assert.IsTrue(gotEvent,"No inserted' Event");
this.gotEvent = false;
// read inserted element and check some default values
BaseReportItem r1 = itemCollection.Find("Inserted");
Assert.AreEqual(GlobalValues.DefaultBackColor,r1.BackColor);
Assert.AreEqual(System.Drawing.Color.Black,r1.ForeColor);
}
private void OnItemAdded (object sender,CollectionChangedEventArgs<BaseReportItem> e)
{
this.gotEvent = true;
Assert.AreEqual ("Inserted",e.Item.Name,"Item should be the same as we insert");
}
#endregion
#region delete/remove
@ -104,11 +94,8 @@ namespace ICSharpCode.Reports.Core.Test.Basics @@ -104,11 +94,8 @@ namespace ICSharpCode.Reports.Core.Test.Basics
{
itemCollection = this.PlainCollection();
int i = itemCollection.Count;
itemCollection.Removed += OnRemoveItem;
itemCollection.RemoveAt(1);
Assert.AreEqual(i-1,itemCollection.Count) ;
Assert.IsTrue(gotEvent,"No 'removed' Event");
gotEvent = false;
}
@ -117,13 +104,10 @@ namespace ICSharpCode.Reports.Core.Test.Basics @@ -117,13 +104,10 @@ namespace ICSharpCode.Reports.Core.Test.Basics
{
itemCollection = this.PlainCollection();
int i = itemCollection.Count;
itemCollection.Removed += OnRemoveItem;
BaseReportItem r = itemCollection[1];
Assert.AreEqual("t2",r.Name);
itemCollection.Remove (r);
Assert.AreEqual(i-1,itemCollection.Count);
Assert.IsTrue(gotEvent,"No 'removed' Event");
gotEvent = false;
}
@ -167,13 +151,6 @@ namespace ICSharpCode.Reports.Core.Test.Basics @@ -167,13 +151,6 @@ namespace ICSharpCode.Reports.Core.Test.Basics
#region privates
private void OnRemoveItem (object sender,CollectionChangedEventArgs<BaseReportItem> e)
{
gotEvent = true;
Assert.AreEqual("t2",e.Item.Name);
}
private ReportItemCollection PlainCollection()
{
ReportItemCollection ri = new ReportItemCollection();

Loading…
Cancel
Save