Browse Source

PushModel can work with SubClasses in List

pull/15/head^2
peterforstmeier 15 years ago
parent
commit
6d8a95be6a
  1. 2
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListHandling/IndexList.cs
  2. 106
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/CollectionStrategy.cs
  3. 87
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/ListStrategy/IListDataManagerFixture.cs
  4. 17
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/TestHelpers/ContributorsList.cs

2
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListHandling/IndexList.cs

@ -158,6 +158,8 @@ namespace ICSharpCode.Reports.Core @@ -158,6 +158,8 @@ namespace ICSharpCode.Reports.Core
}
return ExtendedTypeDescriptor.GetProperties(elementType);
}
public string GetListName(PropertyDescriptor[] listAccessors){
return elementType.Name;
}

106
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/CollectionStrategy.cs

@ -52,7 +52,7 @@ namespace ICSharpCode.Reports.Core { @@ -52,7 +52,7 @@ namespace ICSharpCode.Reports.Core {
for (int criteriaIndex = 0; criteriaIndex < col.Count; criteriaIndex++){
PropertyDescriptor descriptor = c.Find (col[criteriaIndex].ColumnName,true);
if (descriptor == null){
throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture,
"Die Liste enthält keine Spalte [{0}].",
@ -64,7 +64,7 @@ namespace ICSharpCode.Reports.Core { @@ -64,7 +64,7 @@ namespace ICSharpCode.Reports.Core {
}
private IndexList BuildSortIndex(SortColumnCollection col)
private IndexList BuildSortIndex(SortColumnCollection col)
{
IndexList arrayList = new IndexList();
PropertyDescriptor[] sortProperties = BuildSortProperties (col);
@ -113,9 +113,9 @@ namespace ICSharpCode.Reports.Core { @@ -113,9 +113,9 @@ namespace ICSharpCode.Reports.Core {
}
return arrayList;
}
private void BuildAvailableFields ()
private void BuildAvailableFields ()
{
base.AvailableFields.Clear();
foreach (PropertyDescriptor p in this.listProperties){
@ -149,7 +149,7 @@ namespace ICSharpCode.Reports.Core { @@ -149,7 +149,7 @@ namespace ICSharpCode.Reports.Core {
}
}
public override int CurrentPosition
public override int CurrentPosition
{
get {
return base.IndexList.CurrentPosition;
@ -171,9 +171,9 @@ namespace ICSharpCode.Reports.Core { @@ -171,9 +171,9 @@ namespace ICSharpCode.Reports.Core {
}
public override void Sort()
public override void Sort()
{
base.Sort();
base.Sort();
if ((base.ReportSettings.SortColumnsCollection != null)) {
if (base.ReportSettings.SortColumnsCollection.Count > 0) {
@ -187,7 +187,7 @@ namespace ICSharpCode.Reports.Core { @@ -187,7 +187,7 @@ namespace ICSharpCode.Reports.Core {
}
public override void Reset()
public override void Reset()
{
this.CurrentPosition = 0;
base.Reset();
@ -208,6 +208,92 @@ namespace ICSharpCode.Reports.Core { @@ -208,6 +208,92 @@ namespace ICSharpCode.Reports.Core {
#endregion
public override void Fill(IDataItem item)
{
if (current != null) {
BaseDataItem baseDataItem = item as BaseDataItem;
if (baseDataItem != null) {
if (baseDataItem.ColumnName.Contains(".")) {
string[] splittedNames = SplitNames(ref baseDataItem);
PropertyDescriptor p = this.listProperties.Find(splittedNames[0], true);
var propCollection = ExtendedTypeDescriptor.GetProperties(p.PropertyType);
foreach (ExtendedPropertyDescriptor element in propCollection)
{
Console.WriteLine ("{0} - {1} - {2}",element.Name,element.ComponentType,element.PropertyType);
}
PropertyDescriptor ppp = propCollection.Find(splittedNames[1], true);
object classValue = p.GetValue(this.Current);
var v = ppp.GetValue(classValue);
baseDataItem.DBValue = v.ToString();
// Console.WriteLine("{0} - {1}",p.Name,p.PropertyType);
}
else
{
PropertyDescriptor p = this.listProperties.Find(baseDataItem.ColumnName, true);
if (p != null)
{
var o = p.GetValue(this.Current);
if (o != null) {
// baseDataItem.DBValue = p.GetValue(this.Current).ToString();
baseDataItem.DBValue = o.ToString();
} else {
baseDataItem.DBValue = String.Empty;
}
} else {
baseDataItem.DBValue = string.Format(CultureInfo.InvariantCulture,"<{0}> missing!", baseDataItem.ColumnName);
}
}
return;
}
//image processing from IList
BaseImageItem baseImageItem = item as BaseImageItem;
if (baseImageItem != null) {
PropertyDescriptor p = this.listProperties.Find(baseImageItem.ColumnName, true);
if (p != null) {
baseImageItem.Image = p.GetValue(this.Current) as System.Drawing.Image;
}
return;
}
}
}
object getvalueFromproperty(PropertyDescriptor p)
{
throw new NotImplementedException();
}
string[] SplitNames(ref BaseDataItem baseDataItem)
{
var i = baseDataItem.ColumnName.IndexOf(".");
char[] delimiters = new char[] { '.' };
var splittedNames = baseDataItem.ColumnName.Split(delimiters);
return splittedNames;
}
public void old_Fill(IDataItem item)
{
if (current != null) {
BaseDataItem baseDataItem = item as BaseDataItem;
@ -264,7 +350,7 @@ namespace ICSharpCode.Reports.Core { @@ -264,7 +350,7 @@ namespace ICSharpCode.Reports.Core {
}
return ci;
}
*/
*/
public override CurrentItemsCollection FillDataRow()
{
@ -284,7 +370,7 @@ namespace ICSharpCode.Reports.Core { @@ -284,7 +370,7 @@ namespace ICSharpCode.Reports.Core {
}
#endregion
#region IDisposable
public override void Dispose(){

87
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/ListStrategy/IListDataManagerFixture.cs

@ -23,7 +23,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager.ListStrategy @@ -23,7 +23,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager.ListStrategy
public void DefaultConstructor()
{
IDataManager dm = ICSharpCode.Reports.Core.DataManager.CreateInstance(this.contributorCollection as System.Collections.IList,new ReportSettings());
Assert.IsNotNull(dm,"IDataanager should not be 'null'");
Assert.IsNotNull(dm,"IDataManager should not be 'null'");
}
@ -158,7 +158,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager.ListStrategy @@ -158,7 +158,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager.ListStrategy
{
IDataManager dm = ICSharpCode.Reports.Core.DataManager.CreateInstance(this.contributorCollection,new ReportSettings());
DataNavigator dataNav = dm.GetNavigator;
Assert.AreEqual(6,dataNav.AvailableFields.Count);
Assert.AreEqual(7,dataNav.AvailableFields.Count);
}
@ -391,9 +391,90 @@ namespace ICSharpCode.Reports.Core.Test.DataManager.ListStrategy @@ -391,9 +391,90 @@ namespace ICSharpCode.Reports.Core.Test.DataManager.ListStrategy
*/
#endregion
#region get included class
[Test]
public void checkIfPropIsClass()
{
IDataManager dm = ICSharpCode.Reports.Core.DataManager.CreateInstance(this.contributorCollection,new ReportSettings());
IDataNavigator dn = dm.GetNavigator;
int start = 0;
MyDummyClass dummy = new MyDummyClass();
while (dn.MoveNext()) {
dummy.DummyString = "dummy" + start.ToString();
dummy.DummyInt = start;
Contributor view = dn.Current as Contributor;
view.DummyClass = dummy;
Console.WriteLine(view.Last);
start ++;
}
dn.Reset();
dn.MoveNext();
start = 0;
while (dn.MoveNext()) {
Contributor view = dn.Current as Contributor;
Console.WriteLine("{0} - {1} - {2}",view.Last,view.DummyClass.DummyInt,view.DummyClass.DummyString);
start ++;
}
Console.WriteLine(start);
}
ContributorCollection ModifyCollection ()
{
var newcol = this.contributorCollection;
MyDummyClass dummy;
int start = 0;
foreach (var element in newcol)
{
dummy = new MyDummyClass();
dummy.DummyString = "dummy" + start.ToString();
dummy.DummyInt = start;
element.DummyClass = dummy;
start ++;
}
return newcol;
}
[Test]
public void Prop ()
{
var modifyedCollection = this.ModifyCollection();
IDataManager dm = ICSharpCode.Reports.Core.DataManager.CreateInstance(modifyedCollection,new ReportSettings());
IDataNavigator dn = dm.GetNavigator;
ReportItemCollection searchCol = new ReportItemCollection();
searchCol.Add(new BaseDataItem ()
{
Name ="GroupItem",
ColumnName ="DummyClass.DummyString"
}
);
searchCol.Add(new BaseDataItem ()
{
Name ="GroupItem",
ColumnName ="GroupItem"
}
);
dn.Reset();
dn.MoveNext();
while (dn.MoveNext()) {
dn.Fill(searchCol);
var a = (BaseDataItem)searchCol[0];
var b = (BaseDataItem)searchCol[1];
var c = modifyedCollection[dn.CurrentRow];
// Console.WriteLine ("{0} - {1} - {2}",a.DBValue,b.DBValue,c.DummyClass.DummyString);
Assert.AreEqual(a.DBValue,c.DummyClass.DummyString);
Assert.AreEqual(b.DBValue,c.GroupItem);
}
}
#region Setup/TearDown
#endregion
[TestFixtureSetUp]
public void Init()
{
ContributorsList contributorsList = new ContributorsList();

17
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/TestHelpers/ContributorsList.cs

@ -133,10 +133,25 @@ namespace ICSharpCode.Reports.Core.Test.TestHelpers @@ -133,10 +133,25 @@ namespace ICSharpCode.Reports.Core.Test.TestHelpers
}
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;}
}
public class ContributorCollection: List<Contributor>
{
}

Loading…
Cancel
Save