Browse Source

Better grouping with collections

pull/15/head^2
Peter Forstmeier 15 years ago
parent
commit
4237e4c6a7
  1. 48
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj
  2. 37
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ChildNavigator.cs
  3. 63
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/BaseListStrategy.cs
  4. 158
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/CollectionStrategy.cs
  5. 2
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/TableStrategy.cs
  6. 2
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Interfaces/IDataViewStrategy.cs
  7. 4
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/TableStragy/GroupTableFixture.cs

48
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj

@ -122,13 +122,17 @@ @@ -122,13 +122,17 @@
<Compile Include="Project\DataManager\ListStrategy\CollectionStrategy.cs" />
<Compile Include="Project\DataManager\DataManager.cs" />
<Compile Include="Project\Dialogs\EditorDialog.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Project\Dialogs\EditorDialog.Designer.cs" />
<Compile Include="Project\Dialogs\GroupingCollectionEditor.cs" />
<Compile Include="Project\Dialogs\IStringBasedEditorDialog.cs" />
<Compile Include="Project\Dialogs\ParametersCollectionEditor.cs" />
<Compile Include="Project\Dialogs\ParameterDialog.cs" />
<Compile Include="Project\Dialogs\ParameterDialog.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Project\Dialogs\PreviewControl.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Project\Dialogs\DefaultTextEditor.cs" />
<Compile Include="Project\Dialogs\SortingCollectionEditor.cs" />
@ -287,6 +291,7 @@ @@ -287,6 +291,7 @@
</Compile>
<Compile Include="Project\ReportEngine.cs" />
<Compile Include="Project\ReportViewer\NumericToolStripTextBox.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Project\ConnectionObject.cs" />
<Compile Include="Project\ReportModel.cs" />
@ -323,6 +328,7 @@ @@ -323,6 +328,7 @@
<Compile Include="Project\Exporter\ExportColumns\IExportColumnBuilder .cs" />
<Compile Include="Project\ReportViewer\PageNavigationEventArgs.cs" />
<Compile Include="Project\ReportViewer\ReportViewer.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Project\ReportViewer\ReportViewer.Designer.cs">
<DependentUpon>Project\ReportViewer.cs</DependentUpon>
@ -358,44 +364,6 @@ @@ -358,44 +364,6 @@
<None Include="Project\ReportViewer\Resources\Icons\Last.bmp" />
<None Include="Project\ReportViewer\Resources\Icons\Next.bmp" />
</ItemGroup>
<ItemGroup>
<Folder Include="Project\BaseClasses\Printing" />
<Folder Include="Project\BaseItems" />
<Folder Include="Project\BaseItems\Graphics" />
<Folder Include="Project\Collections" />
<Folder Include="Project\DataManager" />
<Folder Include="Project\DataManager\Comparer" />
<Folder Include="Project\DataManager\ListHandling" />
<Folder Include="Project\DataManager\ListStrategy" />
<Folder Include="Project\Dialogs" />
<Folder Include="Project\Events" />
<Folder Include="Project\Exceptions" />
<Folder Include="Project\Exporter\Converters" />
<Folder Include="Project\Expressions\SimpleExpressionEvaluator" />
<Folder Include="Project\Expressions\ReportingLanguage" />
<Folder Include="Project\Expressions\SimpleExpressionEvaluator\Compilation" />
<Folder Include="Project\Expressions\SimpleExpressionEvaluator\Compilation\Functions" />
<Folder Include="Project\Expressions\SimpleExpressionEvaluator\Compilation\Functions\AggregateFunctions" />
<Folder Include="Project\Expressions\SimpleExpressionEvaluator\Compilation\Functions\Operators" />
<Folder Include="Project\Expressions\SimpleExpressionEvaluator\Compilation\Functions\ReportingService" />
<Folder Include="Project\Expressions\SimpleExpressionEvaluator\Evaluation" />
<Folder Include="Project\Expressions\SimpleExpressionEvaluator\Parser" />
<Folder Include="Project\Expressions\SimpleExpressionEvaluator\Utilities" />
<Folder Include="Project\Factories" />
<Folder Include="Project\Globals" />
<Folder Include="Project\Interfaces" />
<Folder Include="Project\Expressions" />
<Folder Include="Project\ReportViewer\Resources\Icons" />
<Folder Include="Project\Resources" />
<Folder Include="Project\Printing" />
<Folder Include="Project\Printing\Graphics" />
<Folder Include="Project\Xml" />
<Folder Include="Project\Configuration" />
<Folder Include="Project\BaseClasses" />
<Folder Include="Project\Exporter" />
<Folder Include="Project\Exporter\ExportColumns" />
<Folder Include="Project\ReportViewer" />
<Folder Include="Project\ReportViewer\Resources" />
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
</Project>

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

@ -12,7 +12,7 @@ namespace ICSharpCode.Reports.Core @@ -12,7 +12,7 @@ namespace ICSharpCode.Reports.Core
public class ChildNavigator:IDataNavigator
{
private IndexList indexList;
private IDataViewStrategy store;
private IDataViewStrategy dataStore;
private System.Collections.Generic.List<BaseComparer>.Enumerator enumerator;
public ChildNavigator(IDataViewStrategy dataStore,IndexList indexList)
@ -20,7 +20,7 @@ namespace ICSharpCode.Reports.Core @@ -20,7 +20,7 @@ namespace ICSharpCode.Reports.Core
if (dataStore == null) {
throw new ArgumentNullException("dataStore");
}
this.store = dataStore;
this.dataStore = dataStore;
this.indexList = indexList;
enumerator = this.indexList.GetEnumerator();
enumerator.MoveNext();
@ -70,34 +70,34 @@ namespace ICSharpCode.Reports.Core @@ -70,34 +70,34 @@ namespace ICSharpCode.Reports.Core
public object Current {
get {
TableStrategy t = this.store as TableStrategy;
// return t.myCurrent(enumerator.Current.ListIndex);
return t.myCurrent(this.indexList[CurrentRow].ListIndex);
return dataStore.myCurrent(this.indexList[CurrentRow].ListIndex);
}
}
public AvailableFieldsCollection AvailableFields {
get {
return store.AvailableFields;
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();
}
}
foreach (var item in collection)
{
IDataItem dataItem = item as IDataItem;
if (dataItem != null)
{
CurrentItemsCollection currentItemsCollection = dataStore.FillDataRow(this.indexList[CurrentRow].ListIndex);
CurrentItem s = currentItemsCollection.FirstOrDefault(x => x.ColumnName == dataItem.ColumnName);
dataItem.DBValue = s.Value.ToString();
}
}
}
public bool MoveNext()
{
this.indexList.CurrentPosition ++;
@ -113,8 +113,7 @@ namespace ICSharpCode.Reports.Core @@ -113,8 +113,7 @@ namespace ICSharpCode.Reports.Core
public CurrentItemsCollection GetDataRow
{
get {
var st= store as TableStrategy;
return st.FillDataRow(this.indexList[CurrentRow].ListIndex);
return dataStore.FillDataRow(this.indexList[CurrentRow].ListIndex);
}
}
@ -126,7 +125,7 @@ namespace ICSharpCode.Reports.Core @@ -126,7 +125,7 @@ namespace ICSharpCode.Reports.Core
if ((i == null) || (i.Count == 0)) {
return null;
}
return new ChildNavigator(this.store,i);
return new ChildNavigator(this.dataStore,i);
}
}

63
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/BaseListStrategy.cs

@ -110,7 +110,7 @@ namespace ICSharpCode.Reports.Core { @@ -110,7 +110,7 @@ namespace ICSharpCode.Reports.Core {
}
compVal = v;
}
// ShowIndexList(IndexList);
ShowIndexList(IndexList);
}
@ -130,7 +130,7 @@ namespace ICSharpCode.Reports.Core { @@ -130,7 +130,7 @@ namespace ICSharpCode.Reports.Core {
#endregion
#region Debug Code
/*
protected static void ShowIndexList (IndexList list)
{
@ -151,7 +151,7 @@ namespace ICSharpCode.Reports.Core { @@ -151,7 +151,7 @@ namespace ICSharpCode.Reports.Core {
}
}
}
*/
#endregion
public virtual void Reset()
@ -180,7 +180,17 @@ namespace ICSharpCode.Reports.Core { @@ -180,7 +180,17 @@ namespace ICSharpCode.Reports.Core {
{
return new CurrentItemsCollection();
}
public virtual object myCurrent(int pos)
{
return null;
}
public virtual CurrentItemsCollection FillDataRow(int pos)
{
return FillDataRow();
}
#endregion
#region SharpReportCore.IDataViewStrategy interface implementation
@ -231,33 +241,6 @@ namespace ICSharpCode.Reports.Core { @@ -231,33 +241,6 @@ namespace ICSharpCode.Reports.Core {
public bool IsGrouped {get;set;}
/*
public bool IsFiltered
{
get {
return this.isFiltered;
} set {
this.isFiltered = value;
}
}
*/
/*
protected virtual void Group()
{
if (this.indexList != null) {
this.isGrouped = true;
this.isSorted = true;
} else {
throw new ReportException ("BaseListStrategy:Group Sorry, no IndexList");
}
}
*/
public virtual void Sort()
{
@ -283,24 +266,6 @@ namespace ICSharpCode.Reports.Core { @@ -283,24 +266,6 @@ namespace ICSharpCode.Reports.Core {
}
/*
public IndexList ChildRows
{
get {
if (this.IsGrouped == true) {
GroupSeparator gs = (GroupSeparator)this.indexList[this.CurrentRow] as GroupSeparator;
if (gs != null) {
return (gs.GetChildren);
} else {
return null;
}
} else {
return null;
}
}
}
*/
public virtual void Dispose()
{
this.Dispose(true);

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

@ -166,7 +166,7 @@ namespace ICSharpCode.Reports.Core { @@ -166,7 +166,7 @@ namespace ICSharpCode.Reports.Core {
base.Group();
IndexList gl = new IndexList("group");
gl = this.BuildSortIndex (ReportSettings.GroupColumnsCollection);
// ShowIndexList(gl);
ShowIndexList(gl);
base.BuildGroup(gl);
}
@ -207,71 +207,12 @@ namespace ICSharpCode.Reports.Core { @@ -207,71 +207,12 @@ namespace ICSharpCode.Reports.Core {
#endregion
/*
public override void Fill(IDataItem item)
{
if (item is BaseDataItem)
{
if (item.ColumnName.Contains(".")) {
string[] splittedNames = SplitNames(ref item);
// PropDes for SubClass
PropertyDescriptor classProperty = this.listProperties.Find(splittedNames[0], true);
if (classProperty == null)
{
WrongColumnName (item);
}
else
{
//all Props for SubClass
var propCollection = ExtendedTypeDescriptor.GetProperties(classProperty.PropertyType);
var subProperty = propCollection.Find(splittedNames[1], true);
var classValue = classProperty.GetValue(this.Current);
SetReturnValue(subProperty,classValue,item);
}
}
else
{
PropertyDescriptor p = this.listProperties.Find(item.ColumnName, true);
if (p != null) {
SetReturnValue(p,this.Current,item);
} else {
WrongColumnName (item);
}
}
return;
}
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 override void Fill(IDataItem item)
{
if (item is BaseDataItem)
{
var retVal = FollowPropertyPath(Current,item.ColumnName);
//var retVal1 = ResolveValue(Current,item.ColumnName);
if (retVal != null) {
item.DBValue = retVal.ToString();
} else {
@ -320,27 +261,7 @@ namespace ICSharpCode.Reports.Core { @@ -320,27 +261,7 @@ namespace ICSharpCode.Reports.Core {
return value;
}
/*
static object ResolveValue(object component, string path)
{
foreach(string segment in path.Split('.'))
{
if (component == null) return null;
if(component is IListSource)
{
component = ((IListSource)component).GetList();
}
if (component is IList)
{
component = ((IList)component)[0];
}
var r = ExtendedTypeDescriptor.GetProperties(component.GetType());
//component = GetValue(component, segment);
}
return component;
}
*/
#endregion
static string WrongColumnName(string propertyName)
@ -348,35 +269,16 @@ namespace ICSharpCode.Reports.Core { @@ -348,35 +269,16 @@ namespace ICSharpCode.Reports.Core {
return String.Format(CultureInfo.InvariantCulture, "Error : <{0}> missing!", propertyName);
}
/*
static void SetReturnValue(PropertyDescriptor p,object component,IDataItem item)
{
if (p != null)
{
var o = p.GetValue(component);
if (o != null) {
item.DBValue = o.ToString();
} else {
item.DBValue = String.Empty;
}
} else {
WrongColumnName(item);
}
}
static string[] SplitNames(ref IDataItem item)
{
char[] delimiters = new char[] { '.' };
var splittedNames = item.ColumnName.Split(delimiters);
return splittedNames;
}
*/
#region test
public override object myCurrent(int pos)
{
// return this.IndexList[pos];
return this.IndexList[this.CurrentPosition];
}
public override CurrentItemsCollection FillDataRow()
{
CurrentItemsCollection ci = base.FillDataRow();
@ -387,13 +289,47 @@ namespace ICSharpCode.Reports.Core { @@ -387,13 +289,47 @@ namespace ICSharpCode.Reports.Core {
c = new CurrentItem();
c.ColumnName = pd.Name;
c.DataType = pd.PropertyType;
c.Value = pd.GetValue(this.Current).ToString();
var s = pd.GetValue(this.Current);
if (s != null)
{
c.Value = s.ToString();
}
else
{
c.Value = String.Empty;
}
ci.Add(c);
}
}
return ci;
}
public override CurrentItemsCollection FillDataRow(int pos)
{
CurrentItemsCollection ci = new CurrentItemsCollection();
CurrentItem c = null;
foreach (PropertyDescriptor pd in this.listProperties)
{
c = new CurrentItem();
c.ColumnName = pd.Name;
c.DataType = pd.PropertyType;
var s = pd.GetValue(this.Current);
if (s != null)
{
c.Value = s.ToString();
}
else
{
c.Value = String.Empty;
}
ci.Add(c);
}
return ci;
}
#endregion
#region IDisposable

2
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/TableStrategy.cs

@ -189,7 +189,7 @@ namespace ICSharpCode.Reports.Core @@ -189,7 +189,7 @@ namespace ICSharpCode.Reports.Core
}
public object myCurrent (int pos)
public override object myCurrent (int pos)
{
return this.table.Rows[pos];
}

2
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Interfaces/IDataViewStrategy.cs

@ -18,7 +18,9 @@ namespace ICSharpCode.Reports.Core{ @@ -18,7 +18,9 @@ namespace ICSharpCode.Reports.Core{
IndexList IndexList {get;}
//test
object myCurrent(int pos);
CurrentItemsCollection FillDataRow();
CurrentItemsCollection FillDataRow(int pos);
//
AvailableFieldsCollection AvailableFields {get;}

4
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/TableStragy/GroupTableFixture.cs

@ -163,9 +163,9 @@ namespace ICSharpCode.Reports.Core.Test.DataManager.TableStrategy @@ -163,9 +163,9 @@ namespace ICSharpCode.Reports.Core.Test.DataManager.TableStrategy
if (dataNavigator.HasChildren) {
DataRow r = dataNavigator.Current as DataRow;
IDataNavigator child = dataNavigator.GetChildNavigator;
string v2 = r["last"].ToString() + " GroupVal :" + r[3].ToString() ;
IDataNavigator child = dataNavigator.GetChildNavigator;
Console.WriteLine(v2);
Assert.That (child,Is.Not.Null);
RecursiveCall(child);

Loading…
Cancel
Save