diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ChildNavigator.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ChildNavigator.cs index 6776226311..f31455795c 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ChildNavigator.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ChildNavigator.cs @@ -67,69 +67,15 @@ namespace ICSharpCode.Reports.Core return dataStore.AvailableFields; } } - - /* - public void Fill(ReportItemCollection collection) - { - TableStrategy tableStrategy = store as TableStrategy; - foreach (var item in collection) { - IDataItem dataItem = item as IDataItem; - if (dataItem != null) { - CurrentItemsCollection currentItemsCollection = tableStrategy.FillDataRow(this.indexList[CurrentRow].ListIndex); - CurrentItem s = currentItemsCollection.FirstOrDefault(x => x.ColumnName == dataItem.ColumnName); - dataItem.DBValue = s.Value.ToString(); - } - - } - } - */ + public void Fill(ReportItemCollection collection) { var position = this.indexList[this.indexList.CurrentPosition].ListIndex; - var current = dataStore.CurrentFromPosition(position); - - //var current = dataStore.FillDataRow(position); dataStore.Fill(position,collection); - /* - foreach (IDataItem item in collection) - { - FillInternal(current, item); - } - */ } - private void FillInternal(object fillFrom,IDataItem item) - { - if (item is BaseDataItem) - { - var retVal = CollectionStrategy.FollowPropertyPath(fillFrom,item.ColumnName); - if (retVal != null) { - item.DBValue = retVal.ToString(); - } else { - item.DBValue = String.Empty; - } - } - - else - { - /* - //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; - } - */ - } - } - - public bool MoveNext() { this.indexList.CurrentPosition ++; diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/CollectionStrategy.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/CollectionStrategy.cs index 2384af96bf..353afbf1e7 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/CollectionStrategy.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/CollectionStrategy.cs @@ -198,17 +198,22 @@ namespace ICSharpCode.Reports.Core { #endregion + public override void Fill(int position,ReportItemCollection collection) { -// base.Fill(collection); + var current = this.CurrentFromPosition(position); + foreach (IDataItem item in collection) + { + FillInternal(current, item); + } } - - public override void Fill(IDataItem item) + + private void FillInternal(object fillFrom,IDataItem item) { if (item is BaseDataItem) { - var retVal = FollowPropertyPath(Current,item.ColumnName); + var retVal = FollowPropertyPath(fillFrom,item.ColumnName); if (retVal != null) { item.DBValue = retVal.ToString(); } else { @@ -218,7 +223,6 @@ namespace ICSharpCode.Reports.Core { else { - //image processing from IList BaseImageItem baseImageItem = item as BaseImageItem; @@ -229,15 +233,22 @@ namespace ICSharpCode.Reports.Core { } return; } + } } + + public override void Fill(IDataItem item) + { + FillInternal(Current,item); + } + #region PropertyPath from StackOverflow //http://stackoverflow.com/questions/366332/best-way-to-get-sub-properties-using-getproperty - public static object FollowPropertyPath(object value, string path) + private static object FollowPropertyPath(object value, string path) { Type currentType = value.GetType(); foreach (string propertyName in path.Split('.')) @@ -276,9 +287,9 @@ namespace ICSharpCode.Reports.Core { public override CurrentItemsCollection FillDataRow(int pos) { - var item = CurrentFromPosition(pos); CurrentItemsCollection ci = new CurrentItemsCollection(); - if (item != null) + var current = CurrentFromPosition(pos); + if (current != null) { CurrentItem c = null; foreach (PropertyDescriptor pd in this.listProperties) @@ -286,7 +297,9 @@ namespace ICSharpCode.Reports.Core { c = new CurrentItem(); c.ColumnName = pd.Name; c.DataType = pd.PropertyType; - var s = pd.GetValue(item); + + //var s = pd.GetValue(current); + var s = FollowPropertyPath(current,pd.Name); if (s != null) { c.Value = s.ToString(); diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/TableStrategy.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/TableStrategy.cs index 1515920a1d..ab0e93ed80 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/TableStrategy.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/TableStrategy.cs @@ -57,32 +57,7 @@ namespace ICSharpCode.Reports.Core DataRow row = this.Current as DataRow; if (row != null) { - this.FillInternal (row,item); - /* - BaseImageItem bi = item as BaseImageItem; - if (bi != null) - { - using (System.IO.MemoryStream memStream = new System.IO.MemoryStream()){ - Byte[] val = row[bi.ColumnName] as Byte[]; - if (val != null) { - if ((val[78] == 66) && (val[79] == 77)){ - memStream.Write(val, 78, val.Length - 78); - } else { - memStream.Write(val, 0, val.Length); - } - System.Drawing.Image image = System.Drawing.Image.FromStream(memStream); - bi.Image = image; - } - } - } else - { - if (item != null) { - item.DBValue = row[item.ColumnName].ToString(); - return; - } - } - */ } } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/ListStrategy/GroupListFixture.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/ListStrategy/GroupListFixture.cs index 1102f24cf8..cfb6c71e1e 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/ListStrategy/GroupListFixture.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/ListStrategy/GroupListFixture.cs @@ -89,7 +89,6 @@ namespace ICSharpCode.Reports.Core.Test.DataManager.ListStrategy do { Assert.That(dataNavigator.HasChildren,Is.True); - // we know that current is a 'contributor' childNavigator.Fill(searchCol); var a = (BaseDataItem)searchCol[0]; Console.WriteLine ("\t{0}",a.DBValue); @@ -137,7 +136,6 @@ namespace ICSharpCode.Reports.Core.Test.DataManager.ListStrategy dataNavigator.Reset(); dataNavigator.MoveNext(); - do { dataNavigator.Fill(searchCol); @@ -150,16 +148,12 @@ namespace ICSharpCode.Reports.Core.Test.DataManager.ListStrategy var childNavigator = dataNavigator.GetChildNavigator; do { -// childNavigator.Fill(searchCol); - - var a = (BaseDataItem)searchCol[0]; - var b = (BaseDataItem)searchCol[1]; - var c = (BaseDataItem)searchCol[2]; - Console.WriteLine ("\t{0} - {1} - {2}",a.DBValue,b.DBValue,c.DBValue); -// Contributor c = dataNavigator.Current as Contributor; -// string v2 = c.Last + " GroupVal :" + c.GroupItem; -// Console.WriteLine(v2); + var a = (BaseDataItem)searchCol[0]; + var b = (BaseDataItem)searchCol[1]; + var c = (BaseDataItem)searchCol[2]; + Console.WriteLine ("\t{0} - {1} - {2}",a.DBValue,b.DBValue,c.DBValue); + } while (childNavigator.MoveNext()); } @@ -182,7 +176,6 @@ namespace ICSharpCode.Reports.Core.Test.DataManager.ListStrategy var childNavigator = dataNavigator.GetChildNavigator; do { - Assert.That(dataNavigator.HasChildren,Is.True); // we know that current is a 'contributor' Contributor c = dataNavigator.Current as Contributor; @@ -196,6 +189,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager.ListStrategy } #endregion + private ContributorCollection ModifyCollection () { var newcol = this.contributorCollection;