Browse Source

DataSource

reports
Peter Forstmeier 12 years ago
parent
commit
ad64360b55
  1. 16
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/ICSharpCode.Reporting.csproj
  2. 31
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Arrange/ArrangeStrategy.cs
  3. 63
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/BaseClasses/AbstractColumn.cs
  4. 4
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/BaseClasses/Page.cs
  5. 53
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/BaseClasses/SortColumn.cs
  6. 92
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Collections.cs
  7. 89
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataManager/Listhandling/CollectionSource.cs
  8. 27
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataManager/Listhandling/IndexList.cs
  9. 94
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/Comparer/BaseComparer.cs
  10. 203
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/DataCollection.cs
  11. 95
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/ExtendedPropertyDescriptor.cs
  12. 65
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/ExtendedTypeDescriptor.cs
  13. 53
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/PropertyTypeHash.cs
  14. 49
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/Data/IDataViewHandling.cs
  15. 2
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/IPrintableObject.cs
  16. 2
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/BaseSection.cs
  17. 4
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/BaseTextItem.cs
  18. 2
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/PrintableItem.cs
  19. 3
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportContainer.cs
  20. 2
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/ExportColumns/ExportColumn.cs
  21. 3
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/ICSharpCode.Reporting.Test.csproj
  22. 57
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/DataSource/CollectionHandlingFixture.cs
  23. 132
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/DataSource/ContributorsList.cs
  24. 1
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/ContainerArrangeStrategyFixture.cs
  25. 21
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/SortColumn.cs
  26. 2
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/ListStrategy/GroupListFixture.cs

16
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/ICSharpCode.Reporting.csproj

@ -72,9 +72,19 @@
<ItemGroup> <ItemGroup>
<Compile Include="Src\Arrange\ArrangeStrategy.cs" /> <Compile Include="Src\Arrange\ArrangeStrategy.cs" />
<Compile Include="Src\Arrange\MeasurementStrategy.cs" /> <Compile Include="Src\Arrange\MeasurementStrategy.cs" />
<Compile Include="Src\BaseClasses\AbstractColumn.cs" />
<Compile Include="Src\BaseClasses\Page.cs" /> <Compile Include="Src\BaseClasses\Page.cs" />
<Compile Include="Src\BaseClasses\PageInfo.cs" /> <Compile Include="Src\BaseClasses\PageInfo.cs" />
<Compile Include="Src\BaseClasses\SortColumn.cs" />
<Compile Include="Src\Collections.cs" />
<Compile Include="Src\Configuration\AssemblyInfo.cs" /> <Compile Include="Src\Configuration\AssemblyInfo.cs" />
<Compile Include="Src\DataManager\Listhandling\CollectionSource.cs" />
<Compile Include="Src\DataManager\Listhandling\IndexList.cs" />
<Compile Include="Src\DataSource\Comparer\BaseComparer.cs" />
<Compile Include="Src\DataSource\DataCollection.cs" />
<Compile Include="Src\DataSource\ExtendedPropertyDescriptor.cs" />
<Compile Include="Src\DataSource\ExtendedTypeDescriptor.cs" />
<Compile Include="Src\DataSource\PropertyTypeHash.cs" />
<Compile Include="Src\Exporter\BaseExporter.cs" /> <Compile Include="Src\Exporter\BaseExporter.cs" />
<Compile Include="Src\Exporter\DebugExporter.cs" /> <Compile Include="Src\Exporter\DebugExporter.cs" />
<Compile Include="Src\Exporter\WpfExporter.cs" /> <Compile Include="Src\Exporter\WpfExporter.cs" />
@ -88,6 +98,7 @@
<Compile Include="Src\Factories\SectionFactory.cs" /> <Compile Include="Src\Factories\SectionFactory.cs" />
<Compile Include="Src\Globals\CreateGraphics.cs" /> <Compile Include="Src\Globals\CreateGraphics.cs" />
<Compile Include="Src\Globals\MeasurementService.cs" /> <Compile Include="Src\Globals\MeasurementService.cs" />
<Compile Include="Src\Interfaces\Data\IDataViewHandling.cs" />
<Compile Include="Src\Interfaces\Export\IExportColumn.cs" /> <Compile Include="Src\Interfaces\Export\IExportColumn.cs" />
<Compile Include="Src\Interfaces\Export\IExportContainer.cs" /> <Compile Include="Src\Interfaces\Export\IExportContainer.cs" />
<Compile Include="Src\Interfaces\Export\IPage.cs" /> <Compile Include="Src\Interfaces\Export\IPage.cs" />
@ -120,18 +131,23 @@
<Compile Include="Src\Xml\MycroParser.cs" /> <Compile Include="Src\Xml\MycroParser.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Folder Include="Src\DataSource\Comparer" />
<Folder Include="Src\Exporter\Visitors" /> <Folder Include="Src\Exporter\Visitors" />
<Folder Include="Src\Interfaces" /> <Folder Include="Src\Interfaces" />
<Folder Include="Src\Globals" /> <Folder Include="Src\Globals" />
<Folder Include="Src" /> <Folder Include="Src" />
<Folder Include="Src" /> <Folder Include="Src" />
<Folder Include="Src\Interfaces\Export" /> <Folder Include="Src\Interfaces\Export" />
<Folder Include="Src\Interfaces\Data" />
<Folder Include="Src\Items" /> <Folder Include="Src\Items" />
<Folder Include="Src\BaseClasses" /> <Folder Include="Src\BaseClasses" />
<Folder Include="Src\Factories" /> <Folder Include="Src\Factories" />
<Folder Include="Src\Exporter" /> <Folder Include="Src\Exporter" />
<Folder Include="Src\Arrange" /> <Folder Include="Src\Arrange" />
<Folder Include="Src\ExportRenderer" /> <Folder Include="Src\ExportRenderer" />
<Folder Include="Src\DataSource" />
<Folder Include="Src\DataManager" />
<Folder Include="Src\DataManager\Listhandling" />
<Folder Include="Src\Wpf" /> <Folder Include="Src\Wpf" />
<Folder Include="Src\PageBuilder" /> <Folder Include="Src\PageBuilder" />
<Folder Include="Src\PageBuilder\Converter" /> <Folder Include="Src\PageBuilder\Converter" />

31
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Arrange/ArrangeStrategy.cs

@ -37,15 +37,19 @@ namespace ICSharpCode.Reporting.Arrange
throw new ArgumentNullException("exportColumn"); throw new ArgumentNullException("exportColumn");
var container = exportColumn as IExportContainer; var container = exportColumn as IExportContainer;
if ((container != null) && (container.ExportedItems.Count > 0)) { if ((container != null) && (container.ExportedItems.Count > 0)) {
BiggestRectangle = Rectangle.Empty;
foreach (var item in container.ExportedItems) {
if (item.DesiredSize.Height > BiggestRectangle.Size.Height) { FindBiggestRectangle(container);
BiggestRectangle = new Rectangle(new Point(container.Location.X + item.Location.X, var resizeable = from resize in container.ExportedItems
container.Location.Y + item.Location.Y) where ((resize.CanGrow == true))
,item.DesiredSize); select resize;
}
}
if (resizeable.Count() > 0) {
if (!BiggestRectangle.IsEmpty) { if (!BiggestRectangle.IsEmpty) {
var containerRectangle = new Rectangle(container.Location,container.Size); var containerRectangle = new Rectangle(container.Location,container.Size);
var desiredRectangle = Rectangle.Union(containerRectangle,BiggestRectangle); var desiredRectangle = Rectangle.Union(containerRectangle,BiggestRectangle);
@ -53,7 +57,18 @@ namespace ICSharpCode.Reporting.Arrange
} }
} }
} }
}
private void FindBiggestRectangle (IExportContainer container) {
BiggestRectangle = Rectangle.Empty;
foreach (var item in container.ExportedItems) {
if (item.DesiredSize.Height > BiggestRectangle.Size.Height) {
BiggestRectangle = new Rectangle(new Point(container.Location.X + item.Location.X,
container.Location.Y + item.Location.Y)
,item.DesiredSize);
}
}
}
public Rectangle BiggestRectangle {get; private set;} public Rectangle BiggestRectangle {get; private set;}
} }

63
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/BaseClasses/AbstractColumn.cs

@ -0,0 +1,63 @@
/*
* Created by SharpDevelop.
* User: Peter Forstmeier
* Date: 21.05.2013
* Time: 20:16
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Xml.Serialization;
namespace ICSharpCode.Reporting.BaseClasses
{
/// <summary>
/// Description of AbstractColumn.
/// </summary>
public class AbstractColumn
{
private string columnName;
private Type dataType;
private string dataTypeName;
public AbstractColumn() {
this.dataType = typeof(System.String);
this.columnName = string.Empty;
}
// public AbstractColumn(string columnName){
// this.columnName = columnName;
// this.dataType = typeof(System.String);
// }
public AbstractColumn(string columnName, Type dataType){
this.columnName = columnName;
this.dataType = dataType;
}
public string ColumnName {get;set;}
public string DataTypeName {
get {
return this.dataType.ToString();
}
set {
dataTypeName = value;
this.dataType = Type.GetType(dataTypeName,true,true);
}
}
[XmlIgnoreAttribute]
public Type DataType {
get {
return dataType;
}
set {
dataType = value;
}
}
}
}

4
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/BaseClasses/Page.cs

@ -111,5 +111,9 @@ namespace ICSharpCode.Reporting.BaseClasses
throw new NotImplementedException(); throw new NotImplementedException();
} }
} }
public bool CanGrow {get;set;}
public bool CanShrink {get;set;}
} }
} }

53
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/BaseClasses/SortColumn.cs

@ -0,0 +1,53 @@
/*
* Created by SharpDevelop.
* User: Peter Forstmeier
* Date: 21.05.2013
* Time: 20:20
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.ComponentModel;
namespace ICSharpCode.Reporting.BaseClasses
{
/// <summary>
/// Description of SortColumn.
/// </summary>
public class SortColumn : AbstractColumn {
private ListSortDirection sortDirection = ListSortDirection.Ascending;
private bool caseSensitive;
public SortColumn():this(String.Empty,ListSortDirection.Ascending,typeof(System.String),false)
{
}
public SortColumn(string columnName,Type type ):this(columnName,ListSortDirection.Ascending,type,false)
{
}
public SortColumn(string columnName,ListSortDirection sortDirection)
:this(columnName,sortDirection,typeof(System.String),false){
}
public SortColumn(string columnName, ListSortDirection sortDirection, Type type,bool caseSensitive ):base (columnName,type)
{
this.caseSensitive = caseSensitive;
this.sortDirection = sortDirection;
}
#region properties
public ListSortDirection SortDirection {get;set;}
public bool CaseSensitive {get;private set;}
#endregion
}
}

92
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Collections.cs

@ -0,0 +1,92 @@
/*
* Created by SharpDevelop.
* User: Peter Forstmeier
* Date: 21.05.2013
* Time: 20:03
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Globalization;
using System.Linq;
using ICSharpCode.Reporting.BaseClasses;
namespace ICSharpCode.Reporting
{
/// <summary>
/// Description of Collections.
/// </summary>
public class ColumnCollection: Collection<AbstractColumn>{
public ColumnCollection()
{
}
public AbstractColumn Find (string columnName)
{
if (String.IsNullOrEmpty(columnName)) {
throw new ArgumentNullException("columnName");
}
return this.FirstOrDefault(x => 0 == String.Compare(x.ColumnName,columnName,true,CultureInfo.InvariantCulture));
}
public void AddRange (IEnumerable<AbstractColumn> items)
{
foreach (AbstractColumn item in items){
this.Add(item);
}
}
/// <summary>
/// The Culture is used for direct String Comparison
/// </summary>
public static CultureInfo Culture
{
get { return CultureInfo.CurrentCulture;}
}
}
public class SortColumnCollection: ColumnCollection
{
public SortColumnCollection()
{
}
// public new AbstractColumn Find (string columnName)
// {
// if (String.IsNullOrEmpty(columnName)) {
// throw new ArgumentNullException("columnName");
// }
//
// return this.FirstOrDefault(x => 0 == String.Compare(x.ColumnName,columnName,true,CultureInfo.InvariantCulture));
// }
public void AddRange (IEnumerable<SortColumn> items)
{
foreach (SortColumn item in items){
this.Add(item);
}
}
/// <summary>
/// The Culture is used for direct String Comparison
/// </summary>
// public new static CultureInfo Culture
// {
// get { return CultureInfo.CurrentCulture;}
// }
}
}

89
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataManager/Listhandling/CollectionSource.cs

@ -0,0 +1,89 @@
/*
* Created by SharpDevelop.
* User: Peter Forstmeier
* Date: 21.05.2013
* Time: 20:09
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections;
using System.Collections.ObjectModel;
using System.ComponentModel;
using ICSharpCode.Reporting.BaseClasses;
using ICSharpCode.Reporting.DataSource;
using ICSharpCode.Reporting.Interfaces.Data;
using ICSharpCode.Reporting.Items;
namespace ICSharpCode.Reporting.DataManager.Listhandling
{
/// <summary>
/// Description of CollectionHandling.
/// </summary>
internal class CollectionSource:IDataViewHandling
{
private PropertyDescriptorCollection listProperties;
private DataCollection<object> baseList;
private ReportSettings reportSettings;
public CollectionSource(IList list,ReportSettings reportSettings)
{
if (list.Count > 0) {
// firstItem = list[0];
var itemType = list[0].GetType();
this.baseList = new DataCollection <object>(itemType);
this.baseList.AddRange(list);
}
this.reportSettings = reportSettings;
this.listProperties = this.baseList.GetItemProperties(null);
IndexList = new IndexList();
}
public int Count
{
get {
return this.baseList.Count;
}
}
public Collection<AbstractColumn> AvailableFields {
get {
// base.AvailableFields.Clear();
var av = new Collection<AbstractColumn>();
foreach (PropertyDescriptor p in this.listProperties){
av.Add (new AbstractColumn(p.Name,p.PropertyType));
}
return av;
}
}
public object Current {
get {
throw new NotImplementedException();
}
}
public void Sort()
{
throw new NotImplementedException();
}
public bool MoveNext()
{
throw new NotImplementedException();
}
public void Reset()
{
throw new NotImplementedException();
}
public IndexList IndexList {get; private set;}
}
}

27
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataManager/Listhandling/IndexList.cs

@ -0,0 +1,27 @@
/*
* Created by SharpDevelop.
* User: Peter Forstmeier
* Date: 21.05.2013
* Time: 20:54
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections.Generic;
using ICSharpCode.Reporting.DataSource.Comparer;
namespace ICSharpCode.Reporting.DataManager.Listhandling
{
/// <summary>
/// Description of IndexList.
/// </summary>
public class IndexList :List<BaseComparer>
{
public IndexList()
{
}
public int CurrentPosition {get;set;}
}
}

94
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/Comparer/BaseComparer.cs

@ -0,0 +1,94 @@
/*
* Created by SharpDevelop.
* User: Peter Forstmeier
* Date: 21.05.2013
* Time: 20:57
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
namespace ICSharpCode.Reporting.DataSource.Comparer
{
/// <summary>
/// Description of BaseComparer.
/// </summary>
public class BaseComparer : IComparable {
private int listIndex;
private object[] objectArray;
ColumnCollection columnCollection;
/// <summary>
/// Default constructor - initializes all fields to default values
/// </summary>
public BaseComparer(ColumnCollection columnCollection , int listIndex, object[] values) {
this.columnCollection = columnCollection;
this.listIndex = listIndex;
this.objectArray = values;
}
/// <summary>
/// Interface method from IComparable
/// </summary>
/// <remarks>
/// Interface method from IComparable
///
/// </remarks>
/// <param name='obj'>a <see cref="BaseComparer"></see></param>
public virtual int CompareTo(object obj) {
return 0;
}
/// <summary>
/// Ausgeben der Werte als Pseudo-CSV
/// </summary>
public override string ToString()
{
System.Text.StringBuilder builder = new System.Text.StringBuilder();
builder.AppendFormat("{0};", this.listIndex);
foreach (object value in objectArray)
{
if (value == null || value == DBNull.Value)
{
builder.AppendFormat("<NULL>");
}
else if (value.GetType() == typeof(string))
{
builder.AppendFormat("\"{0}\"", (string)value);
}
else if (value is IFormattable)
{
builder.AppendFormat("{0}", ((IFormattable)value).ToString("g", System.Globalization.CultureInfo.InvariantCulture));
}
else
{
builder.AppendFormat("[{0}]", value.ToString());
}
builder.Append(';');
}
return builder.ToString();
}
public int ListIndex {
get {
return listIndex;
}
}
public object[] ObjectArray {
get {
return objectArray;
}
}
public ColumnCollection ColumnCollection {
get {
return columnCollection;
}
}
}
}

203
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/DataCollection.cs

@ -0,0 +1,203 @@
/*
* Created by SharpDevelop.
* User: Peter Forstmeier
* Date: 20.05.2013
* Time: 17:55
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;
using System.Reflection;
namespace ICSharpCode.Reporting.DataSource
{
/// <summary>
/// Description of DataCollection.
/// </summary>
internal class DataCollection<T> : IList<T>,ITypedList
{
Collection<T> list = new Collection<T>();
Type elementType;
public DataCollection(Type elementType)
{
this.elementType = elementType;
}
public T this[int index]
{
get {
return list[index];
}
set {
T oldValue = list[index];
if (!object.Equals(oldValue, value)) {
list[index] = value;
}
}
}
public int Count
{
[DebuggerStepThrough]
get {
return list.Count;
}
}
public bool IsReadOnly
{
get {
return false;
}
}
public int IndexOf(T item)
{
return list.IndexOf(item);
}
public void Insert(int index, T item)
{
list.Insert(index, item);
}
public void RemoveAt(int index)
{
list.RemoveAt(index);
}
public void Add(T item)
{
list.Add(item);
}
public void AddRange(IList range)
{
foreach(T t in range) {
Add(t);
}
}
public void Clear(){
list = new Collection<T>();
}
public bool Contains(T item)
{
return list.Contains(item);
}
public void CopyTo(T[] array, int arrayIndex)
{
list.CopyTo(array, arrayIndex);
}
public bool Remove(T item)
{
if (list.Remove(item)) {
return true;
}
return false;
}
#region ITypedList Member
public PropertyDescriptorCollection GetItemProperties(PropertyDescriptor[] listAccessors){
if (listAccessors != null && listAccessors.Length > 0){
Type t = this.elementType;
for(int i = 0; i < listAccessors.Length; i++){
PropertyDescriptor pd = listAccessors[i];
t = (Type) PropertyTypeHash.Instance[t, pd.Name];
}
// if t is null an empty list will be generated
return ExtendedTypeDescriptor.GetProperties(t);
}
return ExtendedTypeDescriptor.GetProperties(elementType);
}
public string GetListName(PropertyDescriptor[] listAccessors){
return elementType.Name;
}
public static Type GetElementType(IList list, Type parentType, string propertyName)
{
DataCollection<T> al = null;
object element = null;
al = CheckForArrayList(list);
if (al == null)
{
if (list.Count > 0)
{
element = list[0];
}
}
if (al == null && element == null)
{
PropertyInfo pi = parentType.GetProperty(propertyName);
if (pi != null)
{
object parentObject = null;
try
{
parentObject = Activator.CreateInstance(parentType);
}
catch(Exception) {}
if (parentObject != null)
{
list = pi.GetValue(parentObject, null) as IList;
al = CheckForArrayList(list);
}
}
}
if (al != null)
{
return al.elementType;
}
else if (element != null)
{
return element.GetType();
}
return null;
}
private static DataCollection<T> CheckForArrayList(object l)
{
IList list = l as IList;
if (list == null)
return null;
if (list.GetType().FullName == "System.Collections.ArrayList+ReadOnlyArrayList")
{
FieldInfo fi = list.GetType().GetField("_list", BindingFlags.NonPublic | BindingFlags.Instance);
if (fi != null)
{
list = (IList) fi.GetValue(list);
}
}
return list as DataCollection<T>;
}
#endregion
[DebuggerStepThrough]
public IEnumerator<T> GetEnumerator()
{
return list.GetEnumerator();
}
[DebuggerStepThrough]
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return list.GetEnumerator();
}
}
}

95
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/ExtendedPropertyDescriptor.cs

@ -0,0 +1,95 @@
/*
* Created by SharpDevelop.
* User: Peter Forstmeier
* Date: 20.05.2013
* Time: 18:05
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections;
using System.ComponentModel;
using System.Reflection;
namespace ICSharpCode.Reporting.DataSource
{
/// <summary>
/// Description of ExtendedPropertyDescriptor.
/// </summary>
internal class ExtendedPropertyDescriptor : PropertyDescriptor
{
Type componentType;
Type propertyType;
PropertyInfo prop;
public ExtendedPropertyDescriptor (string name, Type componentType, Type propertyType)
: base (name, null)
{
this.componentType = componentType;
this.propertyType = propertyType;
}
public override object GetValue (object component)
{
if (!componentType.IsAssignableFrom(component.GetType())){
return null;
}
if (prop == null) {
prop = componentType.GetProperty (Name);
}
object obj = prop.GetValue (component, null);
if (obj != null) {
if (obj is IList){
PropertyTypeHash.Instance[componentType, Name] = DataCollection<object>.GetElementType((IList)obj, componentType, Name);
}
}
return obj;
}
public override void SetValue(object component, object value)
{
if (IsReadOnly){
return;
}
if (prop == null){
prop = componentType.GetProperty (Name);
}
prop.SetValue (component, value, null);
}
public override void ResetValue(object component)
{
return;
}
public override bool CanResetValue(object component)
{
return false;
}
public override bool ShouldSerializeValue(object component)
{
return false;
}
public override Type ComponentType
{
get { return componentType; }
}
public override bool IsReadOnly
{
get { return false; }
}
public override Type PropertyType
{
get { return propertyType; }
}
}
}

65
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/ExtendedTypeDescriptor.cs

@ -0,0 +1,65 @@
/*
* Created by SharpDevelop.
* User: Peter Forstmeier
* Date: 20.05.2013
* Time: 17:59
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections;
using System.ComponentModel;
using System.Reflection;
namespace ICSharpCode.Reporting.DataSource
{
/// <summary>
/// Description of ExtendedTypeDescriptor.
/// </summary>
internal class ExtendedTypeDescriptor
{
private static Hashtable collections = new Hashtable();
private static bool IsAllowedProperty(string name)
{
return true; // alle erlaubt
}
public static PropertyDescriptorCollection GetProperties(Type memberType)
{
if (memberType == null)
return PropertyDescriptorCollection.Empty;
PropertyDescriptorCollection pdc;
if ((pdc = (PropertyDescriptorCollection) collections[memberType]) != null)
return (pdc);
PropertyInfo[] allProps = memberType.GetProperties();
int l = allProps.Length;
for (int i = 0; i < allProps.Length; i++)
{
PropertyInfo pi = allProps[i];
if (!IsAllowedProperty(pi.Name))
{
allProps[i] = null;
l--;
}
}
PropertyDescriptor[] descriptors = new PropertyDescriptor[l];
int j = 0;
foreach(PropertyInfo pinfo in allProps)
{
if (pinfo != null)
{
descriptors[j++] = new ExtendedPropertyDescriptor(pinfo.Name, memberType, pinfo.PropertyType);
}
}
PropertyDescriptorCollection result = new PropertyDescriptorCollection(descriptors);
collections.Add(memberType, result);
return result;
}
}
}

53
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataSource/PropertyTypeHash.cs

@ -0,0 +1,53 @@
/*
* Created by SharpDevelop.
* User: Peter Forstmeier
* Date: 20.05.2013
* Time: 18:02
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections;
namespace ICSharpCode.Reporting.DataSource
{
/// <summary>
/// Description of PropertyTypeHash.
/// </summary>
internal class PropertyTypeHash
{
static PropertyTypeHash instance = new PropertyTypeHash();
static public PropertyTypeHash Instance
{
get { return instance; }
}
Hashtable types = new Hashtable();
private static string MakeIndex(Type t, string name)
{
return t.FullName + '.' + name;
}
public object this[Type type, string fieldName]
{
get
{
return types[MakeIndex(type, fieldName)];
}
set
{
if (value == null)
return;
string key = MakeIndex(type, fieldName);
if (!types.Contains(key))
types.Add(key, value);
}
}
private PropertyTypeHash()
{
}
}
}

49
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/Data/IDataViewHandling.cs

@ -0,0 +1,49 @@
/*
* Created by SharpDevelop.
* User: Peter Forstmeier
* Date: 21.05.2013
* Time: 20:35
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections;
using System.Collections.ObjectModel;
using ICSharpCode.Reporting.BaseClasses;
using ICSharpCode.Reporting.DataManager.Listhandling;
namespace ICSharpCode.Reporting.Interfaces.Data
{
/// <summary>
/// Description of IDataViewHandling.
/// </summary>
public interface IDataViewHandling:IEnumerator{
void Sort ();
// void Group();
// void Bind();
// void Fill (int position,ReportItemCollection collection);
//rausnehmen
// void Fill (IDataItem item);
IndexList IndexList {get;}
// object CurrentFromPosition(int pos);
// CurrentItemsCollection FillDataRow();
// CurrentItemsCollection FillDataRow(int pos);
//
Collection<AbstractColumn> AvailableFields {get;}
int Count {get;}
// int CurrentPosition {get;set;}
// IExpressionEvaluatorFacade ExpressionEvaluator {get;}
}
}

2
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/IPrintableObject.cs

@ -23,12 +23,14 @@ namespace ICSharpCode.Reporting.Interfaces
Color ForeColor {get;set;} Color ForeColor {get;set;}
Color BackColor {get;set;} Color BackColor {get;set;}
Color FrameColor{get;set;} Color FrameColor{get;set;}
bool CanGrow {get;set;}
} }
public interface IPrintableObject:IReportObject { public interface IPrintableObject:IReportObject {
IExportColumn CreateExportColumn(); IExportColumn CreateExportColumn();
IMeasurementStrategy MeasurementStrategy (); IMeasurementStrategy MeasurementStrategy ();
} }
} }

2
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/BaseSection.cs

@ -31,7 +31,5 @@ public class BaseSection:ReportContainer,IReportContainer
} }
#endregion #endregion
} }
} }

4
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/BaseTextItem.cs

@ -23,7 +23,6 @@ namespace ICSharpCode.Reporting.Items
{ {
Font Font {get;set;} Font Font {get;set;}
string Text {get;set;} string Text {get;set;}
bool CanGrow {get;set;}
} }
public class BaseTextItem:PrintableItem,ITextItem public class BaseTextItem:PrintableItem,ITextItem
@ -38,8 +37,6 @@ namespace ICSharpCode.Reporting.Items
public string Text {get;set;} public string Text {get;set;}
public bool CanGrow {get;set;}
public override IExportColumn CreateExportColumn() public override IExportColumn CreateExportColumn()
{ {
var ex = new ExportText(); var ex = new ExportText();
@ -51,6 +48,7 @@ namespace ICSharpCode.Reporting.Items
ex.Size = Size; ex.Size = Size;
ex.Font = Font; ex.Font = Font;
ex.Text = Text; ex.Text = Text;
ex.CanGrow = CanGrow;
return ex; return ex;
} }

2
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/PrintableItem.cs

@ -39,5 +39,7 @@ namespace ICSharpCode.Reporting.Items
public Color FrameColor {get;set;} public Color FrameColor {get;set;}
public bool CanGrow {get;set;}
} }
} }

3
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportContainer.cs

@ -39,7 +39,8 @@ namespace ICSharpCode.Reporting.Items
return new ExportContainer(){ return new ExportContainer(){
Name = this.Name, Name = this.Name,
Size = this.Size, Size = this.Size,
Location = this.Location Location = this.Location,
CanGrow = this.CanGrow,
}; };
} }

2
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/ExportColumns/ExportColumn.cs

@ -43,5 +43,7 @@ namespace ICSharpCode.Reporting.PageBuilder.ExportColumns
public IExportColumn Parent {get;set;} public IExportColumn Parent {get;set;}
public bool CanGrow {get;set;}
} }
} }

3
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/ICSharpCode.Reporting.Test.csproj

@ -58,6 +58,8 @@
</Reference> </Reference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="src\DataSource\ContributorsList.cs" />
<Compile Include="src\DataSource\CollectionHandlingFixture.cs" />
<Compile Include="src\Model\LoadPlainModelFixture.cs" /> <Compile Include="src\Model\LoadPlainModelFixture.cs" />
<Compile Include="src\Model\ReportModelFixture.cs" /> <Compile Include="src\Model\ReportModelFixture.cs" />
<Compile Include="src\Model\ReportSettingsFixture.cs" /> <Compile Include="src\Model\ReportSettingsFixture.cs" />
@ -75,6 +77,7 @@
<ItemGroup> <ItemGroup>
<Folder Include="src" /> <Folder Include="src" />
<Folder Include="src\Model" /> <Folder Include="src\Model" />
<Folder Include="src\DataSource" />
<Folder Include="src\ReportItems" /> <Folder Include="src\ReportItems" />
<Folder Include="src\PageBuilder" /> <Folder Include="src\PageBuilder" />
<Folder Include="src\TestReports" /> <Folder Include="src\TestReports" />

57
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/DataSource/CollectionHandlingFixture.cs

@ -0,0 +1,57 @@
/*
* Created by SharpDevelop.
* User: Peter Forstmeier
* Date: 20.05.2013
* Time: 18:15
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections.Generic;
using ICSharpCode.Reporting.DataManager.Listhandling;
using ICSharpCode.Reporting.DataSource;
using ICSharpCode.Reporting.Items;
using NUnit.Framework;
namespace ICSharpCode.Reporting.Test.DataSource
{
[TestFixture]
public class CollectionHandlingFixture
{
private ContributorCollection list;
[Test]
public void CanInitDataCollection()
{
var collectionSource = new CollectionSource (list,new ReportSettings());
Assert.That(collectionSource,Is.Not.Null);
}
[Test]
public void CollectionCountIsEqualToListCount() {
var collectionSource = new CollectionSource (list,new ReportSettings());
Assert.That(collectionSource.Count,Is.EqualTo(list.Count));
}
[Test]
public void AvailableFieldsEqualContibutorsPropertyCount() {
var collectionSource = new CollectionSource (list,new ReportSettings());
Assert.That(collectionSource.AvailableFields.Count,Is.EqualTo(7));
}
//http://stackoverflow.com/questions/5378293/simplest-way-to-filter-generic-list
//http://stackoverflow.com/questions/5378293/simplest-way-to-filter-generic-list
//http://netmatze.wordpress.com/2012/06/21/implementing-a-generic-iequalitycomparer-and-icomparer-class/
// http://blog.velir.com/index.php/2011/02/17/ilistt-sorting-a-better-way/
[SetUp]
public void CreateList() {
var contributorList = new ContributorsList();
list = contributorList.ContributorCollection;
}
}
}

132
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/DataSource/ContributorsList.cs

@ -0,0 +1,132 @@
/*
* Created by SharpDevelop.
* User: Peter Forstmeier
* Date: 20.05.2013
* Time: 18:09
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections.Generic;
namespace ICSharpCode.Reporting.Test.DataSource
{
/// <summary>
/// Description of ContributorsList.
/// </summary>
public class ContributorsList
{
ContributorCollection contributorCollection;
public ContributorsList()
{
this.contributorCollection = CreateContributorsList();
}
public ContributorCollection ContributorCollection {
get { return contributorCollection; }
}
private ContributorCollection CreateContributorsList () {
DateTime d1 = new DateTime(2000,11,11);
DateTime d2 = new DateTime(2000,01,01);
DateTime d3 = new DateTime(2000,12,24);
ContributorCollection list = new ContributorCollection();
list.Add(new Contributor("Christoph","Wille","Senior Project Wrangler",17,new DateTime(1960,12,8),"F"));
list.Add(new Contributor("Bernhard","Spuida","Senior Project Wrangler",25,new DateTime(1962,2,24),"D"));
list.Add(new Contributor("Daniel","Grunwald","Technical Lead",12,d1,"F"));
list.Add(new Contributor("Matt","Ward","NUnit",7,d1,"F"));
list.Add(new Contributor("David","Srbecky","Debugger",1,d1,"C"));
list.Add(new Contributor("Peter","Forstmeier","SharpDevelop.Reports",7,d1,"D"));
list.Add(new Contributor("Alexander","Zeitler","SharpDevelop.Reports",3,d2,"D"));
list.Add(new Contributor("Markus","Palme","Prg.",6,d2,"R"));
list.Add(new Contributor("Georg","Brandl","Prg.",5,d2,"R"));
list.Add(new Contributor("Roman","Taranchenko","",2,d2,"U"));
list.Add(new Contributor("Denis","Erchoff","",13,d2,"U"));
list.Add(new Contributor("Ifko","Kovacka","",31,d3,"A"));
list.Add(new Contributor("Nathan","Allen","",5,d3,"A"));
list.Add(new Contributor("Dickon","Field","DBTools",10,d3,"U"));
list.Add(new Contributor("Troy","Simpson","Prg.",9,d3,"C"));
list.Add(new Contributor("David","Alpert","Prg.",6,d3,"C"));
return list;
}
}
public class ContributorCollection: List<Contributor>
{
}
public class Contributor {
string last;
string first;
string job;
int randomInt;
DateTime randomDate;
public Contributor(string last, string first,string job,int randomInt,DateTime randomDate,string groupItem)
{
this.last = last;
this.first = first;
this.job = job;
this.randomDate = randomDate;
this.randomInt = randomInt;
this.GroupItem = groupItem;
}
public string Last {
get {
return last;
}
}
public string First {
get {
return first;
}
}
public string Job {
get {
return job;
}
}
public int RandomInt {
get { return randomInt; }
}
public DateTime RandomDate {
get { return randomDate; }
}
public string GroupItem {get; set;}
public MyDummyClass DummyClass {get;set;}
}
public class MyDummyClass
{
public MyDummyClass()
{
}
public string DummyString {get;set;}
public int DummyInt {get;set;}
}
}

1
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/ContainerArrangeStrategyFixture.cs

@ -108,6 +108,7 @@ namespace ICSharpCode.Reporting.Test.PageBuilder
Location = new Point(80,10), Location = new Point(80,10),
Size = new Size (20,70), Size = new Size (20,70),
DesiredSize = new Size (20,70), DesiredSize = new Size (20,70),
CanGrow = true,
Parent = container Parent = container
}; };
return secondItem; return secondItem;

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

@ -35,25 +35,16 @@ namespace ICSharpCode.Reports.Core
public SortColumn(string columnName, ListSortDirection sortDirection, Type type,bool caseSensitive ):base (columnName,type) public SortColumn(string columnName, ListSortDirection sortDirection, Type type,bool caseSensitive ):base (columnName,type)
{ {
this.caseSensitive = caseSensitive; this.CaseSensitive = caseSensitive;
this.sortDirection = sortDirection; this.SortDirection = sortDirection;
} }
#region properties #region properties
public ListSortDirection SortDirection { public ListSortDirection SortDirection {get;set;}
get {
return sortDirection; public bool CaseSensitive {get;set;}
}
set{
this.sortDirection = value;
}
}
public bool CaseSensitive {
get {
return caseSensitive;
}
}
#endregion #endregion
} }

2
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/ListStrategy/GroupListFixture.cs

@ -149,7 +149,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager.ListStrategy
var itemDummy = (BaseDataItem)searchCol[0]; var itemDummy = (BaseDataItem)searchCol[0];
var itemLast = (BaseDataItem)searchCol[1]; var itemLast = (BaseDataItem)searchCol[1];
var itemGroup = (BaseDataItem)searchCol[2]; var itemGroup = (BaseDataItem)searchCol[2];
// Console.WriteLine ("\t{0} - {1} - {2}",itemDummy.DBValue,itemLast.DBValue,itemGroup.DBValue); Console.WriteLine ("\t{0} - {1} - {2}",itemDummy.DBValue,itemLast.DBValue,itemGroup.DBValue);
Assert.That(itemDummy.DBValue,Is.Not.Empty); Assert.That(itemDummy.DBValue,Is.Not.Empty);
Assert.That(itemLast.DBValue,Is.Not.Empty); Assert.That(itemLast.DBValue,Is.Not.Empty);
Assert.That(itemGroup.DBValue,Is.Not.Empty); Assert.That(itemGroup.DBValue,Is.Not.Empty);

Loading…
Cancel
Save