Browse Source

Merge remote branch 'svn/reports'

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@6321 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
pull/1/head
Daniel Grunwald 15 years ago
parent
commit
b42d872313
  1. 21
      src/AddIns/DisplayBindings/Data/ICSharpCode.Data.Core.UI/Windows/ConnectionWizardWindow.xaml
  2. 35
      src/AddIns/DisplayBindings/Data/ICSharpCode.Data.Core.UI/Windows/ConnectionWizardWindow.xaml.cs
  3. 26
      src/AddIns/DisplayBindings/Data/ICSharpCode.Data.SQLServer/SQLServerDatabaseDriver.cs
  4. 21
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/ICSharpCode.ReportDesigner.addin
  5. 15
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/Commands/ExplorerCommands.cs
  6. 14
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/Designer/RootDesigner/ReportRootDesigner.cs
  7. 6
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportDesignerView.cs
  8. 31
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportExplorer/ExplorerTree.cs
  9. 10
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportExplorer/ReportExplorerPad.cs
  10. 88
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/Generators/AbstractReportGenerator.cs
  11. 20
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/Generators/GeneratePullDataReport.cs
  12. 19
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/Generators/GeneratePushDataReport.cs
  13. 3
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportStructure.cs
  14. 9
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/WizardPanels/LayoutPanelControl.cs
  15. 30
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/WizardPanels/ResultPanel.cs
  16. 77
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Test/Wizard/Generators/GenarateListReportFixture.cs
  17. 57
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Test/Wizard/Generators/GenerateTableReportFixture.cs
  18. 4
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj
  19. 9
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/PrintHelper.cs
  20. 13
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/StandardPrinter.cs
  21. 57
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Collections/Collections.cs
  22. 145
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ChildNavigator.cs
  23. 88
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataNavigator.cs
  24. 63
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/BaseListStrategy.cs
  25. 41
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/TableStrategy.cs
  26. 166
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs
  27. 3
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/TableConverter.cs
  28. 24
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/old_GroupedRowConverter.cs
  29. 42
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Interfaces/IDataNavigator.cs
  30. 141
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/GroupTableFixture.cs
  31. 4
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/IListDataManagerFixture.cs
  32. 2
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/Strategy/TableStrategyFixture.cs
  33. 7
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/TableDataManagerFixture.cs
  34. 1
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/IntegrationTests/AggregateFunctionsFixture.cs
  35. 1
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/IntegrationTests/AggregateFunctionsFromIListFixture.cs
  36. 4
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/IntegrationTests/ConcatFieldsFixture.cs

21
src/AddIns/DisplayBindings/Data/ICSharpCode.Data.Core.UI/Windows/ConnectionWizardWindow.xaml

@ -21,6 +21,7 @@ @@ -21,6 +21,7 @@
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
@ -43,7 +44,7 @@ @@ -43,7 +44,7 @@
<TextBlock Grid.Row="1" Margin="3">Database driver:</TextBlock>
<ComboBox x:Name="cboDatabaseDriver" Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2" Margin="3" SelectedItem="{Binding SelectedDatabaseDriver, ElementName=This}"
ItemsSource="{x:Static data:DatabaseDriver.DatabaseDrivers}" SelectionChanged="cboDatabaseDriver_SelectionChanged">
ItemsSource="{x:Static data:DatabaseDriver.DatabaseDrivers}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" />
@ -58,7 +59,7 @@ @@ -58,7 +59,7 @@
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<ComboBox x:Name="cboDatasources" Margin="3" IsEditable="True" KeyDown="cboDatasources_KeyDown" SelectionChanged="cboDatasources_SelectionChanged"
<ComboBox x:Name="cboDatasources" Margin="3" IsEditable="True" KeyDown="cboDatasources_KeyDown"
SelectedItem="{Binding SelectedDatasource, ElementName=This}" ItemsSource="{Binding SelectedDatabaseDriver.Datasources, ElementName=This}">
<ComboBox.ItemTemplate>
<DataTemplate>
@ -66,14 +67,16 @@ @@ -66,14 +67,16 @@
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<userControls:ErrorRetryButton x:Name="erbDatasources" Grid.Column="1" UseExclamationMark="True" Exception="{Binding DatasourceException, ElementName=This}" MouseLeftButtonUp="erbDatasources_MouseLeftButtonUp" />
<Button Grid.Column="1" Margin="3" Content="Auto Discover" Click="btnAutoDiscover_Click" />
</Grid>
<ContentControl Grid.Row="3" Grid.Column="1" Margin="3" Content="{Binding SelectedDatasource.ControlPanel, ElementName=This}" />
<Button x:Name="btnConnect" Grid.Row="4" Grid.Column="1" Margin="3" Content="Connect" HorizontalAlignment="Right" Click="btnConnect_Click" />
<TextBlock Grid.Row="5" Margin="3">Database:</TextBlock>
<TextBlock Grid.Row="4" Margin="3">Database:</TextBlock>
<ComboBox x:Name="cboDatabases" Grid.Row="4" Grid.Column="1" Margin="3" SelectedItem="{Binding SelectedDatabase, ElementName=This}"
<ComboBox x:Name="cboDatabases" Grid.Row="5" Grid.Column="1" Margin="3" SelectedItem="{Binding SelectedDatabase, ElementName=This}"
ItemsSource="{Binding SelectedDatasource.Databases, ElementName=This}" SelectionChanged="cboDatabases_SelectionChanged">
<ComboBox.ItemTemplate>
<DataTemplate>
@ -82,13 +85,13 @@ @@ -82,13 +85,13 @@
</ComboBox.ItemTemplate>
</ComboBox>
<Expander Grid.Row="5" Grid.Column="1" Margin="2" Header="Connection String" VerticalAlignment="Top"
<Expander Grid.Row="6" Grid.Column="1" Margin="2" Header="Connection String" VerticalAlignment="Top"
IsExpanded="{Binding SelectedDatasource.UseUserDefinedConnectionString, ElementName=This}">
<TextBox Text="{Binding SelectedDatasource.UserDefinedConnectionString, ElementName=This}" MinLines="5" />
</Expander>
<userControls:LoadingCircle Grid.Row="6" Margin="3" IsActivated="{Binding IsLoading, ElementName=This}" />
<StackPanel Grid.Row="6" Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Right">
<userControls:LoadingCircle Grid.Row="7" Margin="3" IsActivated="{Binding IsLoading, ElementName=This}" />
<StackPanel Grid.Row="7" Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Right">
<Button x:Name="btnAdd" Margin="3" Padding="3" Click="btnAdd_Click" IsEnabled="False">Add</Button>
<Button Margin="3" IsCancel="True" Padding="3" Click="btnCancel_Click">Cancel</Button>
</StackPanel>

35
src/AddIns/DisplayBindings/Data/ICSharpCode.Data.Core.UI/Windows/ConnectionWizardWindow.xaml.cs

@ -54,7 +54,12 @@ namespace ICSharpCode.Data.Core.UI.Windows @@ -54,7 +54,12 @@ namespace ICSharpCode.Data.Core.UI.Windows
get { return _selectedDatasource; }
set
{
_selectedDatasource = value;
if (value != null)
btnConnect.IsEnabled = true;
else
btnConnect.IsEnabled = false;
_selectedDatasource = value;
OnPropertyChanged("SelectedDatasource");
}
}
@ -133,7 +138,6 @@ namespace ICSharpCode.Data.Core.UI.Windows @@ -133,7 +138,6 @@ namespace ICSharpCode.Data.Core.UI.Windows
thread.SetApartmentState(ApartmentState.STA);
thread.IsBackground = true;
thread.Start();
}
private void PopulateDatabases()
@ -152,7 +156,10 @@ namespace ICSharpCode.Data.Core.UI.Windows @@ -152,7 +156,10 @@ namespace ICSharpCode.Data.Core.UI.Windows
}
catch (Exception ex)
{
SetException(ex);
Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() =>
{
MessageBox.Show(this, ex.Message, this.Title, MessageBoxButton.OK, MessageBoxImage.Error);
}));
}
SetIsLoading(false);
@ -168,17 +175,12 @@ namespace ICSharpCode.Data.Core.UI.Windows @@ -168,17 +175,12 @@ namespace ICSharpCode.Data.Core.UI.Windows
#region Event handlers
private void cboDatabaseDriver_SelectionChanged(object sender, SelectionChangedEventArgs e)
private void btnAutoDiscover_Click(object sender, RoutedEventArgs e)
{
PopulateDatasources();
}
private void cboDatasources_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
PopulateDatabases();
}
private void erbDatasources_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
private void btnConnect_Click(object sender, RoutedEventArgs e)
{
PopulateDatabases();
}
@ -189,18 +191,7 @@ namespace ICSharpCode.Data.Core.UI.Windows @@ -189,18 +191,7 @@ namespace ICSharpCode.Data.Core.UI.Windows
{
if (SelectedDatabaseDriver != null)
{
IDatasource newDatasource = SelectedDatabaseDriver.AddNewDatasource(cboDatasources.Text);
try
{
if (newDatasource.PopulateDatabases())
SetSelectedDatasource(newDatasource);
}
catch (Exception ex)
{
SetException(ex);
SetSelectedDatasource(newDatasource);
}
SelectedDatasource = SelectedDatabaseDriver.AddNewDatasource(cboDatasources.Text);
}
}
}

26
src/AddIns/DisplayBindings/Data/ICSharpCode.Data.SQLServer/SQLServerDatabaseDriver.cs

@ -13,6 +13,8 @@ using ICSharpCode.Data.Core.DatabaseObjects; @@ -13,6 +13,8 @@ using ICSharpCode.Data.Core.DatabaseObjects;
using System.Data.SqlClient;
using System.Collections.Specialized;
using ICSharpCode.Data.Core.Enums;
using System.Windows;
using System.Windows.Threading;
#endregion
@ -171,7 +173,29 @@ namespace ICSharpCode.Data.Core.DatabaseDrivers.SQLServer @@ -171,7 +173,29 @@ namespace ICSharpCode.Data.Core.DatabaseDrivers.SQLServer
SqlConnection sqlConnection = null;
sqlConnection = new SqlConnection();
sqlConnection.ConnectionString = datasource.ConnectionString;
sqlConnection.Open();
try
{
sqlConnection.Open();
}
catch (SqlException ex)
{
switch (ex.Number)
{
case 2:
case 3:
case 53:
Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() =>
{
Datasources.Remove(datasource as SQLServerDatasource);
}));
break;
default:
break;
}
throw ex;
}
string sqlversion = sqlConnection.ServerVersion;
sqlversion = sqlversion.Split('.').FirstOrDefault(); //major version

21
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/ICSharpCode.ReportDesigner.addin

@ -149,15 +149,28 @@ @@ -149,15 +149,28 @@
class="ICSharpCode.Reports.Addin.Commands.ClearSelectedNodeCommand"/>
</Path>
<!-- Toggle Sortorder -->
<Path name = "/SharpDevelopReports/ContextMenu/FieldsExplorer/ColumnTreeNode">
<!-- Sorting -->
<Path name = "/SharpDevelopReports/ContextMenu/FieldsExplorer/ColumnSortTreeNode">
<MenuItem id="toggle"
label="${res:SharpReport.FieldsExplorer.ContextMenu.Columns.ToggleSort}"
class="ICSharpCode.Reports.Addin.Commands.ToggleOrderCommand"/>
plorer
<MenuItem id="removesortnode"
label="${res:SharpReport.FieldsExplorer.ContextMenu.Columns.Remove}"
class="ICSharpCode.Reports.Addin.Commands.RemoveSortNodeCommand"/>
</Path>
<!-- Grouping -->
<Path name = "/SharpDevelopReports/ContextMenu/FieldsExplorer/ColumnGroupTreeNode">
<MenuItem id="toggle"
label="${res:SharpReport.FieldsExplorer.ContextMenu.Columns.ToggleSort}"
class="ICSharpCode.Reports.Addin.Commands.ToggleOrderCommand"/>
<MenuItem id="removenode"
<MenuItem id="removegroupnode"
label="${res:SharpReport.FieldsExplorer.ContextMenu.Columns.Remove}"
class="ICSharpCode.Reports.Addin.Commands.RemoveNodeCommand"/>
class="ICSharpCode.Reports.Addin.Commands.RemoveGroupNodeCommand"/>
</Path>

15
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/Commands/ExplorerCommands.cs

@ -30,18 +30,27 @@ namespace ICSharpCode.Reports.Addin.Commands @@ -30,18 +30,27 @@ namespace ICSharpCode.Reports.Addin.Commands
}
public class RemoveNodeCommand : AbstractCommand
public class RemoveSortNodeCommand : AbstractCommand
{
public override void Run()
{
ReportExplorerPad r = this.Owner as ReportExplorerPad;
if (r != null) {
r.RemoveNode();
r.RemoveSortNode();
}
}
}
public class RemoveGroupNodeCommand : AbstractCommand
{
public override void Run()
{
ReportExplorerPad r = this.Owner as ReportExplorerPad;
if (r != null) {
r.RemoveGroupNode();
}
}
}
public class ClearSelectedNodeCommand : AbstractCommand
{

14
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/Designer/RootDesigner/ReportRootDesigner.cs

@ -19,7 +19,8 @@ using System.Windows.Forms; @@ -19,7 +19,8 @@ using System.Windows.Forms;
using System.Windows.Forms.Design;
using ICSharpCode.Reports.Core;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.Core;
namespace ICSharpCode.Reports.Addin
{
/// <summary>
@ -261,13 +262,12 @@ namespace ICSharpCode.Reports.Addin @@ -261,13 +262,12 @@ namespace ICSharpCode.Reports.Addin
{
System.Console.WriteLine("RootDesigner:OnComponentChanged {0} from {1} to {2}",ce.Component.ToString(),ce.OldValue,ce.NewValue);
// MemberDescriptor m = ce.Member;
if (ce.Member.Name == "Name") {
AbstractItem item = ce.Component as AbstractItem;
if (item != null) {
item.Name = ce.NewValue.ToString();
}
LoggingService.Debug("RootDesigner:OnComponentChanged");
AbstractItem item = ce.Component as AbstractItem;
if (item != null) {
item.Name = ce.NewValue.ToString();
}
BaseSection section = ce.Component as BaseSection;
if (section != null) {

6
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportDesignerView.cs

@ -295,7 +295,8 @@ namespace ICSharpCode.Reports.Addin @@ -295,7 +295,8 @@ namespace ICSharpCode.Reports.Addin
this.MakeDirty();
ReportExplorerPad explorerPad = CheckReportExplorer();
IComponentChangeService change = Host.GetService(typeof(IComponentChangeService)) as IComponentChangeService;
change.OnComponentChanged(explorerPad.ReportModel.ReportSettings.SortColumnsCollection, null, null, null);
// change.OnComponentChanged(explorerPad.ReportModel.ReportSettings.SortColumnsCollection, null, null, null);
change.OnComponentChanged(explorerPad, null, null, null);
}
@ -353,8 +354,6 @@ namespace ICSharpCode.Reports.Addin @@ -353,8 +354,6 @@ namespace ICSharpCode.Reports.Addin
private void OnComponentChanged (object sender, ComponentChangedEventArgs e)
{
// More customization of items can be found in
//ICSharpCode.Reports.Addin.ReportRootDesigner
BaseImageItem item = e.Component as BaseImageItem;
if (item != null) {
@ -366,6 +365,7 @@ namespace ICSharpCode.Reports.Addin @@ -366,6 +365,7 @@ namespace ICSharpCode.Reports.Addin
if (!loading && !unloading) {
this.MakeDirty();
}
MergeFormChanges();
}

31
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportExplorer/ExplorerTree.cs

@ -22,7 +22,7 @@ namespace ICSharpCode.Reports.Addin @@ -22,7 +22,7 @@ namespace ICSharpCode.Reports.Addin
/// </summary>
internal class ExplorerTree:TreeView,INotifyPropertyChanged
{
private const string sortColumnMenu = "/SharpDevelopReports/ContextMenu/FieldsExplorer/ColumnTreeNode";
private const string sortColumnMenu = "/SharpDevelopReports/ContextMenu/FieldsExplorer/ColumnSortTreeNode";
private const string sectionContextMenu = "/SharpDevelopReports/ContextMenu/FieldsExplorer/SectionTreeNode";
private const string parameterEditorMenu = "/SharpDevelopReports/ContextMenu/FieldsExplorer/ParameterNode";
private SectionNode nodeRoot;
@ -43,7 +43,6 @@ namespace ICSharpCode.Reports.Addin @@ -43,7 +43,6 @@ namespace ICSharpCode.Reports.Addin
// private static int storedprocIcon = 7;
private static int columnIcon = 8;
// private static int functionIcon = 9;
private ReportModel reportModel;
@ -208,7 +207,7 @@ namespace ICSharpCode.Reports.Addin @@ -208,7 +207,7 @@ namespace ICSharpCode.Reports.Addin
#region Treehandling
public void RemoveNode()
public void RemoveSortNode()
{
if (this.SelectedNode != null) {
AbstractColumn abstr = this.reportModel.ReportSettings.SortColumnsCollection.Find(this.SelectedNode.Text);
@ -218,7 +217,21 @@ namespace ICSharpCode.Reports.Addin @@ -218,7 +217,21 @@ namespace ICSharpCode.Reports.Addin
TreeNode parent = this.SelectedNode.Parent;
this.SelectedNode.Remove();
this.SelectedNode = parent;
this.OnPropertyChanged ("RemoveNode");
this.OnPropertyChanged ("RemoveSortNode");
}
}
public void RemoveGroupNode ()
{
if (this.SelectedNode != null) {
AbstractColumn abstr = this.reportModel.ReportSettings.GroupColumnsCollection.Find(this.SelectedNode.Text);
if (abstr != null) {
this.reportModel.ReportSettings.GroupColumnsCollection.Remove(abstr as GroupColumn);
TreeNode parent = this.SelectedNode.Parent;
this.SelectedNode.Remove();
this.SelectedNode = parent;
this.OnPropertyChanged ("RemoveGroupNode");
}
}
}
@ -229,6 +242,7 @@ namespace ICSharpCode.Reports.Addin @@ -229,6 +242,7 @@ namespace ICSharpCode.Reports.Addin
this.OnPropertyChanged ("ClearSection");
}
public void ToggleSortOrder()
{
SortColumnNode scn = this.SelectedNode as SortColumnNode;
@ -274,9 +288,9 @@ namespace ICSharpCode.Reports.Addin @@ -274,9 +288,9 @@ namespace ICSharpCode.Reports.Addin
SortColumnNode scn = null;
foreach (SortColumn sc in this.reportModel.ReportSettings.SortColumnsCollection){
if (sc.SortDirection == ListSortDirection.Ascending) {
scn = new SortColumnNode (sc.ColumnName,ascendingIcon,"/SharpDevelopReports/ContextMenu/FieldsExplorer/ColumnTreeNode");
scn = new SortColumnNode (sc.ColumnName,ascendingIcon,"/SharpDevelopReports/ContextMenu/FieldsExplorer/ColumnSortTreeNode");
} else {
scn = new SortColumnNode (sc.ColumnName,descendingIcon,"/SharpDevelopReports/ContextMenu/FieldsExplorer/ColumnTreeNode");
scn = new SortColumnNode (sc.ColumnName,descendingIcon,"/SharpDevelopReports/ContextMenu/FieldsExplorer/ColumnSortTreeNode");
}
this.nodeSorting.Nodes.Add(scn);
}
@ -289,9 +303,9 @@ namespace ICSharpCode.Reports.Addin @@ -289,9 +303,9 @@ namespace ICSharpCode.Reports.Addin
foreach (GroupColumn groupColumn in this.reportModel.ReportSettings.GroupColumnsCollection)
{
if (groupColumn.SortDirection == ListSortDirection.Ascending) {
groupNode = new GroupColumnNode (groupColumn.ColumnName,ascendingIcon,"/SharpDevelopReports/ContextMenu/FieldsExplorer/ColumnTreeNode");
groupNode = new GroupColumnNode (groupColumn.ColumnName,ascendingIcon,"/SharpDevelopReports/ContextMenu/FieldsExplorer/ColumnGroupTreeNode");
} else {
groupNode = new GroupColumnNode (groupColumn.ColumnName,descendingIcon,"/SharpDevelopReports/ContextMenu/FieldsExplorer/ColumnTreeNode");
groupNode = new GroupColumnNode (groupColumn.ColumnName,descendingIcon,"/SharpDevelopReports/ContextMenu/FieldsExplorer/ColumnGroupTreeNode");
}
this.nodeGrouping.Nodes.Add(groupNode);
}
@ -328,6 +342,7 @@ namespace ICSharpCode.Reports.Addin @@ -328,6 +342,7 @@ namespace ICSharpCode.Reports.Addin
SetSortColumns();
SetGroupColumns();
SetParameters();
this.ExpandAll();
this.EndUpdate();
}

10
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportExplorer/ReportExplorerPad.cs

@ -172,9 +172,15 @@ namespace ICSharpCode.Reports.Addin @@ -172,9 +172,15 @@ namespace ICSharpCode.Reports.Addin
}
public void RemoveNode()
public void RemoveSortNode()
{
this.explorerTree.RemoveNode();
this.explorerTree.RemoveSortNode();
}
public void RemoveGroupNode()
{
this.explorerTree.RemoveGroupNode();
}
public void RefreshParameters()

88
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/Generators/AbstractReportGenerator.cs

@ -35,31 +35,64 @@ namespace ICSharpCode.Reports.Addin.ReportWizard @@ -35,31 +35,64 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
public abstract class AbstractReportGenerator : IReportGenerator
{
private ReportModel reportModel;
private StringWriter stringWriter;
private Properties properties;
private ReportItemCollection reportItemCollection;
private AvailableFieldsCollection availableFieldsCollection;
private ParameterCollection parameterCollection;
protected AbstractReportGenerator(ReportModel reportModel,Properties customizer)
private ColumnCollection groupColumnCollection;
protected AbstractReportGenerator(ReportModel reportModel,Properties properties)
{
if (reportModel == null) {
throw new ArgumentNullException("reportModel");
}
if (customizer == null) {
if (properties == null) {
throw new ArgumentNullException("customizer");
}
this.properties = customizer;
this.reportModel = reportModel;
this.ReportModel = reportModel;
this.Properties = properties;
ReportStructure = (ReportStructure)properties.Get("Generator");
this.AvailableFieldsCollection.Clear();
this.ReportItemCollection.Clear();
this.GroupColumnCollection.Clear();
this.ParameterCollection.Clear();
}
protected void UpdateGenerator ()
{
this.AvailableFieldsCollection.AddRange(ReportStructure.AvailableFieldsCollection);
this.ReportItemCollection.AddRange(ReportStructure.ReportItemCollection);
if (ReportModel.ReportSettings.GroupColumnsCollection.Count > 0) {
this.GroupColumnCollection.AddRange(ReportModel.ReportSettings.GroupColumnsCollection);
}
if (ReportStructure.SqlQueryParameters.Count > 0) {
ReportModel.ReportSettings.ParameterCollection.AddRange(ReportStructure.SqlQueryParameters);
}
}
protected void UpdateModel ()
{
var settings = this.ReportModel.ReportSettings;
settings.AvailableFieldsCollection.Clear();
settings.AvailableFieldsCollection.AddRange(this.availableFieldsCollection);
settings.GroupColumnsCollection.Clear();
settings.GroupColumnsCollection.AddRange(this.groupColumnCollection);
// settings.ParameterCollection.Clear();
// settings.ParameterCollection.AddRange(this.SqlQueryParameters);
}
private void AdjustSectionToDefault () {
ReportSettings settings = reportModel.ReportSettings;
foreach (ICSharpCode.Reports.Core.BaseSection s in reportModel.SectionCollection) {
ReportSettings settings = ReportModel.ReportSettings;
foreach (ICSharpCode.Reports.Core.BaseSection s in ReportModel.SectionCollection) {
s.Size = new Size(settings.PageSize.Width - settings.LeftMargin - settings.RightMargin,
GlobalValues.DefaultSectionHeight);
Console.WriteLine("AdjustSectionToDefaul Size : {0}",s.Size);
@ -69,18 +102,19 @@ namespace ICSharpCode.Reports.Addin.ReportWizard @@ -69,18 +102,19 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
protected void WriteToXml ()
{
Console.WriteLine(" WriteToXml ()");
LoggingService.Debug("AbstractreportGenerator - Generate Xml friom RepotModel");
ReportDesignerWriter rpd = new ReportDesignerWriter();
StringWriterWithEncoding writer = new StringWriterWithEncoding(System.Text.Encoding.UTF8);
XmlTextWriter xml =XmlHelper.CreatePropperWriter(writer);
XmlHelper.CreatePropperDocument(xml);
rpd.Save(this.reportModel.ReportSettings,xml);
rpd.Save(this.ReportModel.ReportSettings,xml);
xml.WriteEndElement();
xml.WriteStartElement("SectionCollection");
foreach (ICSharpCode.Reports.Core.BaseSection s in this.reportModel.SectionCollection) {
foreach (ICSharpCode.Reports.Core.BaseSection s in this.ReportModel.SectionCollection) {
rpd.Save(s,xml);
}
@ -125,16 +159,13 @@ namespace ICSharpCode.Reports.Addin.ReportWizard @@ -125,16 +159,13 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
#endregion
protected ReportStructure ReportStructure {get;private set;}
public ReportModel ReportModel {get;private set;}
public ReportModel ReportModel {
get { return reportModel; }
}
public Properties Properties {
get { return properties; }
}
public Properties Properties {get; private set;}
protected ReportItemCollection ReportItemCollection {
get { if (this.reportItemCollection == null) {
@ -164,6 +195,25 @@ namespace ICSharpCode.Reports.Addin.ReportWizard @@ -164,6 +195,25 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
return this.parameterCollection;
}
}
public ColumnCollection GroupColumnCollection {
get{
if (this.groupColumnCollection == null) {
this.groupColumnCollection = new ColumnCollection();
}
return this.groupColumnCollection;
}
set { this.groupColumnCollection = value;}
}
public ParameterCollection ParameterCollection {
get {
if (this.parameterCollection == null) {
this.parameterCollection = new ParameterCollection();
}
return this.parameterCollection;
}
}
}
}

20
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/Generators/GeneratePullDataReport.cs

@ -18,7 +18,7 @@ namespace ICSharpCode.Reports.Addin.ReportWizard @@ -18,7 +18,7 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
/// </summary>
internal class GeneratePullDataReport: AbstractReportGenerator
{
private ReportStructure reportStructure;
public GeneratePullDataReport(ReportModel reportModel,
Properties properties):base(reportModel,properties)
@ -28,15 +28,9 @@ namespace ICSharpCode.Reports.Addin.ReportWizard @@ -28,15 +28,9 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
throw new ArgumentNullException("reportModel");
}
if (base.ReportModel.ReportSettings.DataModel != GlobalEnums.PushPullModel.PullData) {
throw new ArgumentException ("Wrong DataModel in GeneratePullReport");
}
reportStructure = (ReportStructure)properties.Get("Generator");
base.AvailableFieldsCollection.AddRange(reportStructure.AvailableFieldsCollection);
base.ReportItemCollection.AddRange(reportStructure.ReportItemCollection);
base.SqlQueryParameters.AddRange(reportStructure.SqlQueryParameters);
base.UpdateGenerator();
base.UpdateModel();
base.SqlQueryParameters.AddRange(base.ReportStructure.SqlQueryParameters);
}
@ -45,10 +39,10 @@ namespace ICSharpCode.Reports.Addin.ReportWizard @@ -45,10 +39,10 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
{
base.ReportModel.ReportSettings.ReportType = GlobalEnums.ReportType.DataReport;
base.ReportModel.ReportSettings.DataModel = GlobalEnums.PushPullModel.PullData;
base.ReportModel.ReportSettings.AvailableFieldsCollection.AddRange(reportStructure.AvailableFieldsCollection);
base.ReportModel.ReportSettings.ParameterCollection.AddRange(reportStructure.SqlQueryParameters);
// base.ReportModel.ReportSettings.AvailableFieldsCollection.AddRange(base.ReportStructure.AvailableFieldsCollection);
// base.ReportModel.ReportSettings.ParameterCollection.AddRange(base.ReportStructure.SqlQueryParameters);
base.GenerateReport();
GlobalEnums.ReportLayout reportLayout = (GlobalEnums.ReportLayout)base.Properties.Get("ReportLayout");
AbstractLayout layout = LayoutFactory.CreateGenerator(reportLayout,base.ReportModel,base.ReportItemCollection);
layout.CreateReportHeader();

19
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/Generators/GeneratePushDataReport.cs

@ -23,25 +23,16 @@ namespace ICSharpCode.Reports.Addin.ReportWizard @@ -23,25 +23,16 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
{
public class GeneratePushDataReport : AbstractReportGenerator
{
private ReportStructure reportStructure;
// private ReportStructure reportStructure;
/// <summary>
/// Default constructor - initializes all fields to default values
/// </summary>
public GeneratePushDataReport(ReportModel reportModel,
Properties properties):base(reportModel,properties)
{
if (reportModel == null) {
throw new ArgumentNullException("reportModel");
}
if (base.ReportModel.ReportSettings.DataModel != GlobalEnums.PushPullModel.PushData) {
throw new ArgumentException ("Wrong DataModel in GeneratePushReport");
}
reportStructure = (ReportStructure)properties.Get("Generator");
base.AvailableFieldsCollection.AddRange(reportStructure.AvailableFieldsCollection);
base.ReportItemCollection.AddRange(reportStructure.ReportItemCollection);
base.UpdateGenerator();
base.UpdateModel();
}
@ -49,10 +40,12 @@ namespace ICSharpCode.Reports.Addin.ReportWizard @@ -49,10 +40,12 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
{
base.ReportModel.ReportSettings.ReportType = GlobalEnums.ReportType.DataReport;
base.ReportModel.ReportSettings.DataModel = GlobalEnums.PushPullModel.PushData;
base.ReportModel.ReportSettings.AvailableFieldsCollection.AddRange(reportStructure.AvailableFieldsCollection);
// base.ReportModel.ReportSettings.AvailableFieldsCollection.AddRange(base.ReportStructure.AvailableFieldsCollection);
base.GenerateReport();
GlobalEnums.ReportLayout reportLayout = (GlobalEnums.ReportLayout)base.Properties.Get("ReportLayout");
AbstractLayout layout = LayoutFactory.CreateGenerator(reportLayout,base.ReportModel,base.ReportItemCollection);
layout.CreateReportHeader();
layout.CreatePageHeader();
layout.CreateDataSection(base.ReportModel.DetailSection);

3
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportStructure.cs

@ -92,13 +92,10 @@ namespace ICSharpCode.Reports.Addin.ReportWizard @@ -92,13 +92,10 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
public string ConnectionString {get;set;}
public string SqlString {get;set;}
public CommandType CommandType {get;set;}
public ICSharpCode.Reports.Core.GlobalEnums.PushPullModel DataModel {get;set;}

9
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/WizardPanels/LayoutPanelControl.cs

@ -90,8 +90,13 @@ namespace ICSharpCode.Reports.Addin.ReportWizard @@ -90,8 +90,13 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
public string GroupName
{
get {
return comboBox1.SelectedItem.ToString();
}
string ret = String.Empty;
if (!String.IsNullOrEmpty(comboBox1.SelectedItem.ToString()))
{
ret = comboBox1.SelectedItem.ToString();
}
return ret;
}
}
}
}

30
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/WizardPanels/ResultPanel.cs

@ -263,18 +263,7 @@ namespace ICSharpCode.Reports.Addin.ReportWizard @@ -263,18 +263,7 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
{
this.model = reportStructure.CreateAndFillReportModel();
this.resultDataSet = FillGrid();
if (this.resultDataSet != null) {
this.grdQuery.DataSource = this.resultDataSet.Tables[0];
foreach (DataGridViewColumn dd in this.grdQuery.Columns) {
DataGridViewColumnHeaderCheckBoxCell cb = new DataGridViewColumnHeaderCheckBoxCell();
cb.CheckBoxAlignment = HorizontalAlignment.Right;
cb.Checked = true;
dd.HeaderCell = cb;
dd.SortMode = DataGridViewColumnSortMode.NotSortable;
}
this.grdQuery.AllowUserToOrderColumns = true;
}
SetupGrid ();
base.EnableNext = true;
base.EnableFinish = true;
@ -295,6 +284,23 @@ namespace ICSharpCode.Reports.Addin.ReportWizard @@ -295,6 +284,23 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
return true;
}
private void SetupGrid()
{
if (this.resultDataSet != null) {
this.grdQuery.DataSource = this.resultDataSet.Tables[0];
foreach (DataGridViewColumn dd in this.grdQuery.Columns) {
DataGridViewColumnHeaderCheckBoxCell cb = new DataGridViewColumnHeaderCheckBoxCell();
cb.CheckBoxAlignment = HorizontalAlignment.Right;
cb.Checked = true;
dd.HeaderCell = cb;
dd.SortMode = DataGridViewColumnSortMode.NotSortable;
}
this.grdQuery.AllowUserToOrderColumns = true;
}
}
private void WriteResult ()
{
if (this.resultDataSet != null) {

77
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Test/Wizard/Generators/GenarateListReportFixture.cs

@ -8,10 +8,10 @@ @@ -8,10 +8,10 @@
*/
using System;
using System.ComponentModel;
using ICSharpCode.Core;
using ICSharpCode.Reports.Addin.ReportWizard;
using ICSharpCode.Reports.Core;
using NUnit.Framework;
namespace ICSharpCode.Reports.Addin.Test.Wizard.Generators
@ -29,22 +29,81 @@ namespace ICSharpCode.Reports.Addin.Test.Wizard.Generators @@ -29,22 +29,81 @@ namespace ICSharpCode.Reports.Addin.Test.Wizard.Generators
Assert.AreEqual(reportName,m.ReportSettings.ReportName);
Assert.AreEqual(1,m.ReportSettings.AvailableFieldsCollection.Count);
Assert.AreEqual(GlobalEnums.ReportType.DataReport,m.ReportSettings.ReportType);
}
#region General generated Properties
[Test]
public void Datamodel_Should_PushModel()
{
ReportModel m = ReportGenerationHelper.CreateModel(reportName);
Assert.AreEqual(GlobalEnums.PushPullModel.PushData,m.ReportSettings.DataModel);
}
[Test]
public void ReportHeaderShouldContainOneItem ()
public void GroupColumCollection_Should_Empty ()
{
ReportModel m = ReportGenerationHelper.CreateModel(reportName);
Assert.That(m.ReportSettings.GroupColumnsCollection,Is.Empty);
}
[Test]
public void SortColumnCollection_Should_Empty ()
{
ReportModel m = ReportGenerationHelper.CreateModel(reportName);
Assert.That(m.ReportSettings.SortColumnsCollection,Is.Empty);
}
#endregion
#region Sort_Group
[Test]
public void GroupColumCollection_Grouping_Should_Set()
{
ReportModel m = ReportGenerationHelper.CreateModel(reportName);
var rs = m.ReportSettings;
GroupColumn gc = new GroupColumn("GroupItem",1,ListSortDirection.Ascending);
rs.GroupColumnsCollection.Add(gc);
Assert.AreEqual(rs.GroupColumnsCollection.Count,1);
}
[Test]
public void SortColumCollection_Sorting_Should_Set()
{
ReportModel m = ReportGenerationHelper.CreateModel(reportName);
var rs = m.ReportSettings;
SortColumn gc = new SortColumn("GroupItem",ListSortDirection.Ascending);
rs.SortColumnsCollection.Add(gc);
Assert.AreEqual(rs.SortColumnsCollection.Count,1);
}
#endregion
#region ReportHeader
[Test]
public void ReportHeader_ShouldContain_OneItem ()
{
ICSharpCode.Reports.Core.BaseSection s = this.reportModel.ReportHeader;
Assert.AreEqual(1,s.Items.Count);
ICSharpCode.Reports.Core.BaseTextItem item = (ICSharpCode.Reports.Core.BaseTextItem)s.Items[0];
Assert.IsNotNull(item);
}
#endregion
#region PageHeader
[Test]
public void PageHeaderShouldContainRowItem()
public void PageHeader_Should_Contain_RowItem()
{
ICSharpCode.Reports.Core.BaseSection s = this.reportModel.PageHeader;
BaseReportItem item = s.Items[0];
@ -54,7 +113,7 @@ namespace ICSharpCode.Reports.Addin.Test.Wizard.Generators @@ -54,7 +113,7 @@ namespace ICSharpCode.Reports.Addin.Test.Wizard.Generators
[Test]
public void PageHeaderRowShouldContainTextItems()
public void PageHeader_Row_Should_Contain_TextItems()
{
ICSharpCode.Reports.Core.BaseSection section = this.reportModel.PageHeader;
BaseReportItem item = section.Items[0];
@ -64,10 +123,11 @@ namespace ICSharpCode.Reports.Addin.Test.Wizard.Generators @@ -64,10 +123,11 @@ namespace ICSharpCode.Reports.Addin.Test.Wizard.Generators
#endregion
#region Detail
[Test]
public void PageDetailShouldContainRowItem()
public void PageDetail_Should_Contain_RowItem()
{
ICSharpCode.Reports.Core.BaseSection s = this.reportModel.DetailSection;
BaseReportItem item = s.Items[0];
@ -76,7 +136,7 @@ namespace ICSharpCode.Reports.Addin.Test.Wizard.Generators @@ -76,7 +136,7 @@ namespace ICSharpCode.Reports.Addin.Test.Wizard.Generators
[Test]
public void PageDetailShouldContainDataItems()
public void PageDetail_Row_Should_Contain_DataItems()
{
ICSharpCode.Reports.Core.BaseSection s = this.reportModel.DetailSection;
ICSharpCode.Reports.Core.BaseRowItem rowItem = (ICSharpCode.Reports.Core.BaseRowItem)s.Items[0];
@ -91,7 +151,7 @@ namespace ICSharpCode.Reports.Addin.Test.Wizard.Generators @@ -91,7 +151,7 @@ namespace ICSharpCode.Reports.Addin.Test.Wizard.Generators
#region PageFooter
[Test]
public void PageFooterShouldContainOneItem ()
public void PageFooter_Should_Contain_OneItem ()
{
ICSharpCode.Reports.Core.BaseSection s = this.reportModel.PageFooter;
Assert.AreEqual(1,s.Items.Count);
@ -101,7 +161,7 @@ namespace ICSharpCode.Reports.Addin.Test.Wizard.Generators @@ -101,7 +161,7 @@ namespace ICSharpCode.Reports.Addin.Test.Wizard.Generators
[Test]
public void PageFooterContainsPageNumberFunction()
public void PageFooter_Should_Contain_PageNumberFunction()
{
ICSharpCode.Reports.Core.BaseSection s = this.reportModel.PageFooter;
ICSharpCode.Reports.Core.BaseTextItem item = (ICSharpCode.Reports.Core.BaseTextItem)s.Items[0];
@ -111,6 +171,7 @@ namespace ICSharpCode.Reports.Addin.Test.Wizard.Generators @@ -111,6 +171,7 @@ namespace ICSharpCode.Reports.Addin.Test.Wizard.Generators
#endregion
#region Setup/Teardown
[TestFixtureSetUp]

57
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Test/Wizard/Generators/GenerateTableReportFixture.cs

@ -8,11 +8,10 @@ @@ -8,11 +8,10 @@
*/
using System;
using System.ComponentModel;
using ICSharpCode.Core;
using ICSharpCode.Reports.Addin.ReportWizard;
using ICSharpCode.Reports.Core;
using NUnit.Framework;
namespace ICSharpCode.Reports.Addin.Test.Wizard.Generators
@ -23,6 +22,8 @@ namespace ICSharpCode.Reports.Addin.Test.Wizard.Generators @@ -23,6 +22,8 @@ namespace ICSharpCode.Reports.Addin.Test.Wizard.Generators
private const string reportName = "TableBasedReport";
ReportModel reportModel;
#region General generated Properties
[Test]
public void InitModel()
{
@ -30,10 +31,62 @@ namespace ICSharpCode.Reports.Addin.Test.Wizard.Generators @@ -30,10 +31,62 @@ namespace ICSharpCode.Reports.Addin.Test.Wizard.Generators
Assert.AreEqual(reportName,m.ReportSettings.ReportName);
Assert.AreEqual(1,m.ReportSettings.AvailableFieldsCollection.Count);
Assert.AreEqual(GlobalEnums.ReportType.DataReport,m.ReportSettings.ReportType);
}
[Test]
public void Datamodel_Should_PushModel()
{
ReportModel m = ReportGenerationHelper.CreateModel(reportName);
Assert.AreEqual(GlobalEnums.PushPullModel.PushData,m.ReportSettings.DataModel);
}
[Test]
public void GroupColumCollection_Should_Empty ()
{
ReportModel m = ReportGenerationHelper.CreateModel(reportName);
Assert.That(m.ReportSettings.GroupColumnsCollection,Is.Empty);
}
[Test]
public void SortColumnCollection_Should_Empty ()
{
ReportModel m = ReportGenerationHelper.CreateModel(reportName);
Assert.That(m.ReportSettings.SortColumnsCollection,Is.Empty);
}
#endregion
#region Sort/Group
[Test]
public void GroupColumCollection_Grouping_Should_Set()
{
ReportModel m = ReportGenerationHelper.CreateModel(reportName);
var rs = m.ReportSettings;
GroupColumn gc = new GroupColumn("GroupItem",1,ListSortDirection.Ascending);
rs.GroupColumnsCollection.Add(gc);
Assert.AreEqual(rs.GroupColumnsCollection.Count,1);
}
[Test]
public void SortColumCollection_Sorting_Should_Set()
{
ReportModel m = ReportGenerationHelper.CreateModel(reportName);
var rs = m.ReportSettings;
SortColumn gc = new SortColumn("GroupItem",ListSortDirection.Ascending);
rs.SortColumnsCollection.Add(gc);
Assert.AreEqual(rs.SortColumnsCollection.Count,1);
}
#endregion
#region PageHeader

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

@ -94,6 +94,7 @@ @@ -94,6 +94,7 @@
<Compile Include="Project\BaseItems\ErrorItem.cs" />
<Compile Include="Project\BaseItems\Graphics\BaseLineItem.cs" />
<Compile Include="Project\BaseItems\IExpression.cs" />
<Compile Include="Project\DataManager\ChildNavigator.cs" />
<Compile Include="Project\DataManager\Comparer\BaseComparer.cs" />
<Compile Include="Project\DataManager\Comparer\GroupSeparator.cs" />
<Compile Include="Project\DataManager\Comparer\SortComparer.cs" />
@ -129,11 +130,12 @@ @@ -129,11 +130,12 @@
<Compile Include="Project\Exceptions\UnknownItemException.cs" />
<Compile Include="Project\Exceptions\WrongColumnException.cs" />
<Compile Include="Project\Exceptions\WrongSectionException.cs" />
<Compile Include="Project\Exporter\Converters\old_GroupedRowConverter.cs" />
<Compile Include="Project\Expressions\SimpleExpressionEvaluator\Compilation\Functions\ReportingService\FieldReference.cs" />
<Compile Include="Project\Exporter\BasePager.cs" />
<Compile Include="Project\Exporter\Converters\BaseConverter.cs" />
<Compile Include="Project\Exporter\Converters\ConverterFactory.cs" />
<Compile Include="Project\Exporter\Converters\RowConverter.cs" />
<Compile Include="Project\Exporter\Converters\GroupedRowConverter.cs" />
<Compile Include="Project\Exporter\Converters\TableConverter.cs" />
<Compile Include="Project\Exporter\Decorators\IBaseStyleDecorator.cs" />
<Compile Include="Project\Exporter\Decorators\ILineDecorator.cs" />

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

@ -38,7 +38,7 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing @@ -38,7 +38,7 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing
#endregion
#region AdjustParentInSection
#region Section's
public static void AdjustParent (BaseReportItem parent,ReportItemCollection items)
{
@ -61,6 +61,13 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing @@ -61,6 +61,13 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing
}
}
public static void AdjustSectionLocation (BaseSection section)
{
section.Location = new Point(section.Location.X,section.SectionOffset );
}
#endregion

13
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/StandardPrinter.cs

@ -28,7 +28,6 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing @@ -28,7 +28,6 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing
public static void AdjustBackColor (ISimpleContainer container)
{
BaseReportItem parent = container as BaseReportItem;
if (parent.BackColor != GlobalValues.DefaultBackColor) {
foreach (BaseReportItem item in container.Items)
@ -39,6 +38,18 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing @@ -39,6 +38,18 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing
}
public static void AdjustBackColor (ISimpleContainer container, Color defaultColor)
{
BaseReportItem parent = container as BaseReportItem;
if (parent.BackColor != defaultColor) {
foreach (BaseReportItem item in container.Items)
{
item.BackColor = defaultColor;
}
}
}
public static void FillBackground (Graphics graphics,BaseStyleDecorator decorator)
{
if (decorator.BackColor != GlobalValues.DefaultBackColor) {

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

@ -81,16 +81,6 @@ namespace ICSharpCode.Reports.Core{ @@ -81,16 +81,6 @@ namespace ICSharpCode.Reports.Core{
}
/*
public ExporterCollection ConvertAll<BaseExportColumn>(Converter<BaseReportItem, ICSharpCode.Reports.Core.Exporter.BaseExportColumn> converter)
{
List<ICSharpCode.Reports.Core.Exporter.BaseExportColumn> l = InnerList.ConvertAll(converter);
ExporterCollection e = new ExporterCollection();
e.AddRange(l);
return e;
}
*/
public void AddRange(IEnumerable<BaseReportItem> items)
{
foreach (BaseReportItem item in items) Add(item);
@ -121,12 +111,7 @@ namespace ICSharpCode.Reports.Core{ @@ -121,12 +111,7 @@ namespace ICSharpCode.Reports.Core{
private BaseReportItem InnerFind (string name)
{
var query = from bt in base.Items where bt.Name == name select bt;
if (query.Count() >0) {
return query.FirstOrDefault();
} else {
return null;
}
return this.FirstOrDefault(x => 0 == String.Compare(x.Name, name,true));
}
@ -203,12 +188,8 @@ namespace ICSharpCode.Reports.Core{ @@ -203,12 +188,8 @@ namespace ICSharpCode.Reports.Core{
if (String.IsNullOrEmpty(columnName)) {
throw new ArgumentNullException("columnName");
}
var query = from bt in this where bt.ColumnName == columnName select bt;
if (query.Count() >0) {
return query.FirstOrDefault();
} else {
return null;
}
return this.FirstOrDefault(x => 0 == String.Compare(x.ColumnName,columnName,true));
}
}
[Serializable()]
@ -223,12 +204,8 @@ namespace ICSharpCode.Reports.Core{ @@ -223,12 +204,8 @@ namespace ICSharpCode.Reports.Core{
if (String.IsNullOrEmpty(columnName)) {
throw new ArgumentNullException("columnName");
}
var query = from bt in this where bt.ColumnName == columnName select bt;
if (query.Count() >0) {
return query.FirstOrDefault();
} else {
return null;
}
return this.FirstOrDefault(x => 0 == String.Compare(x.ColumnName,columnName,true));
}
@ -264,12 +241,8 @@ namespace ICSharpCode.Reports.Core{ @@ -264,12 +241,8 @@ namespace ICSharpCode.Reports.Core{
if (String.IsNullOrEmpty(columnName)) {
throw new ArgumentNullException("columnName");
}
var query = from bt in this where bt.ColumnName == columnName select bt;
if (query.Count() >0) {
return query.FirstOrDefault();
} else {
return null;
}
return this.FirstOrDefault(x => 0 == String.Compare(x.ColumnName,columnName,true));
}
@ -305,12 +278,8 @@ namespace ICSharpCode.Reports.Core{ @@ -305,12 +278,8 @@ namespace ICSharpCode.Reports.Core{
if (String.IsNullOrEmpty(parameterName)) {
throw new ArgumentNullException("parameterName");
}
var query = from bt in this where bt.ParameterName == parameterName select bt;
if (query.Count() >0) {
return query.FirstOrDefault();
} else {
return null;
}
return this.FirstOrDefault(x => 0 == String.Compare(x.ParameterName,parameterName,true));
}
@ -377,12 +346,8 @@ namespace ICSharpCode.Reports.Core{ @@ -377,12 +346,8 @@ namespace ICSharpCode.Reports.Core{
if (String.IsNullOrEmpty(columnName)) {
throw new ArgumentNullException("columnName");
}
var query = from bt in this where bt.ColumnName.ToLower() == columnName.ToLower(CultureInfo.InvariantCulture) select bt;
if (query.Count() >0) {
return query.FirstOrDefault();
} else {
return null;
}
return this.FirstOrDefault(x => 0 == String.Compare(x.ColumnName,columnName,true));
}
}
}

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

@ -0,0 +1,145 @@ @@ -0,0 +1,145 @@
/*
* Created by SharpDevelop.
* User: Peter Forstmeier
* Date: 27.07.2010
* Time: 16:02
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
namespace ICSharpCode.Reports.Core
{
/// <summary>
/// Description of ChildNavigator.
/// </summary>
public class ChildNavigator:IDataNavigator
{
IndexList indexList;
IDataViewStrategy dataStore;
private System.Collections.Generic.List<BaseComparer>.Enumerator ce;
public ChildNavigator(IDataViewStrategy dataStore,IndexList indexList)
{
if (dataStore == null) {
throw new ArgumentNullException("dataStore");
}
this.dataStore = dataStore;
this.indexList = indexList;
ce = this.indexList.GetEnumerator();
ce.MoveNext();
}
public bool HasMoreData {
get {
throw new NotImplementedException();
}
}
public bool HasChildren {
get {
IndexList ind = BuildChildList();
return ((ind != null) && (ind.Count > 0));
// return false;
}
}
public int ChildListCount {
get {
throw new NotImplementedException();
}
}
public bool IsSorted {
get {
throw new NotImplementedException();
}
}
public bool IsGrouped {
get {
throw new NotImplementedException();
}
}
public int CurrentRow {
get {
throw new NotImplementedException();
}
}
public int Count {
get {
return this.indexList.Count;
}
}
public object Current {
get {
TableStrategy t = this.dataStore as TableStrategy;
return t.myCurrent(ce.Current.ListIndex);
// return ci;
}
}
public AvailableFieldsCollection AvailableFields {
get {
throw new NotImplementedException();
}
}
public void Fill(ReportItemCollection collection)
{
throw new NotImplementedException();
}
public bool MoveNext()
{
return this.ce.MoveNext();
}
public void Reset()
{
throw new NotImplementedException();
}
public CurrentItemsCollection GetDataRow()
{
throw new NotImplementedException();
}
public IDataNavigator GetChildNavigator()
{
var i = BuildChildList();
if ((i == null) || (i.Count == 0)) {
return null;
}
return new ChildNavigator(this.dataStore,i);
}
public void SwitchGroup()
{
throw new NotImplementedException();
}
public bool ChildMoveNext()
{
throw new NotImplementedException();
}
public void FillChild(ReportItemCollection collection)
{
throw new NotImplementedException();
}
private IndexList BuildChildList()
{
GroupComparer gc = this.indexList[this.indexList.CurrentPosition] as GroupComparer;
if (gc == null) {
return null;
}
return gc.IndexList;
}
}
}

88
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataNavigator.cs

@ -7,16 +7,15 @@ @@ -7,16 +7,15 @@
using System;
using System.Collections;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
namespace ICSharpCode.Reports.Core
{
/// <summary>
/// Description of DataNavigator.
/// </summary>
public class DataNavigator :IDataNavigator,IEnumerable
public class DataNavigator :IDataNavigator
// public class DataNavigator :IDataNavigator,IEnumerable
{
private IDataViewStrategy store;
@ -70,7 +69,7 @@ namespace ICSharpCode.Reports.Core @@ -70,7 +69,7 @@ namespace ICSharpCode.Reports.Core
public int CurrentRow {
get {return this.store.CurrentPosition;}
}
public int Count {
get {return this.store.Count;}
@ -97,7 +96,7 @@ namespace ICSharpCode.Reports.Core @@ -97,7 +96,7 @@ namespace ICSharpCode.Reports.Core
#region IEnumarable
/*
public IEnumerator RangeEnumerator(int start, int end)
{
if (start > end) {
@ -119,6 +118,83 @@ namespace ICSharpCode.Reports.Core @@ -119,6 +118,83 @@ namespace ICSharpCode.Reports.Core
yield return this.Current;
}
}
*/
#endregion
#region GroupedList
public bool HasChildren
{
get{
IndexList ind = BuildChildList();
return ((ind != null) && (ind.Count > 0));
}
}
IndexList childList;
private System.Collections.Generic.List<BaseComparer>.Enumerator ce;
public void SwitchGroup()
{
this.childList = BuildChildList();
ce = childList.GetEnumerator();
ce.MoveNext();
}
public int ChildListCount
{
get {
return BuildChildList().Count;
}
}
public bool ChildMoveNext()
{
return ce.MoveNext();
}
public void FillChild (ReportItemCollection collection)
{
TableStrategy t = store as TableStrategy;
foreach (BaseDataItem item in collection) {
CurrentItemsCollection ci = t.FillDataRow(ce.Current.ListIndex);
CurrentItem s = ci.FirstOrDefault(x => x.ColumnName == ((BaseDataItem)item).ColumnName);
item.DBValue = s.Value.ToString();
}
}
private IndexList BuildChildList()
{
var t = store as TableStrategy;
IndexList i = t.IndexList;
GroupComparer gc = i[t.CurrentPosition] as GroupComparer;
if (gc == null) {
return null;
}
return gc.IndexList;
}
#endregion
#region Try make recursive with ChildNavigavtor
public IDataNavigator GetChildNavigator()
{
var i = BuildChildList();
if ((i == null) || (i.Count == 0)) {
return null;
}
return new ChildNavigator(this.store,i);
}
#endregion
}

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

@ -25,14 +25,6 @@ namespace ICSharpCode.Reports.Core { @@ -25,14 +25,6 @@ namespace ICSharpCode.Reports.Core {
public static class SortExtension
{
// template
/*
public static IOrderedQueryable<User> MyOrder(this IQueryable<User> source )
{
return source.OrderBy(x => x.LastName).ThenBy(x => x.FirstName).ThenBy(x => x.Email);
}
*/
public static IOrderedQueryable<BaseComparer> AscendingOrder(this IQueryable<BaseComparer> source )
{
@ -69,20 +61,6 @@ namespace ICSharpCode.Reports.Core { @@ -69,20 +61,6 @@ namespace ICSharpCode.Reports.Core {
#endregion
#region Event's
/*
protected void NotifyGroupChanging (object source,GroupSeparator groupSeperator)
{
if (this.GroupChanged != null) {
this.GroupChanged (source,new GroupChangedEventArgs(groupSeperator));
}
}
*/
#endregion
protected static Collection<AbstractColumn> CreateSortCollection (ColumnCollection items)
@ -152,30 +130,6 @@ namespace ICSharpCode.Reports.Core { @@ -152,30 +130,6 @@ namespace ICSharpCode.Reports.Core {
}
}
/*
protected static void CheckSortArray (ExtendedIndexCollection arr,string text)
{
if (arr != null) {
int row = 0;
foreach (BaseComparer bc in arr) {
GroupSeparator sep = bc as GroupSeparator;
if (sep != null) {
} else {
object [] oarr = bc.ObjectArray;
for (int i = 0;i < oarr.Length ;i++ ) {
string str = oarr[i].ToString();
}
row ++;
}
}
}
System.Console.WriteLine("-----End of <CheckSortArray>-----------");
}
*/
public virtual void Reset()
{
@ -304,24 +258,7 @@ namespace ICSharpCode.Reports.Core { @@ -304,24 +258,7 @@ namespace ICSharpCode.Reports.Core {
}
/*
public bool HasChildren
{
get {
if (this.IsGrouped == true) {
GroupSeparator gs = (GroupSeparator)this.indexList[this.CurrentRow] as GroupSeparator;
if (gs != null) {
return (gs.GetChildren.Count > 0);
} else {
return false;
}
} else {
return false;
}
}
}
*/
/*
public IndexList ChildRows
{

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

@ -11,7 +11,6 @@ using System.Collections; @@ -11,7 +11,6 @@ using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Data;
using System.Linq;
namespace ICSharpCode.Reports.Core
{
@ -37,9 +36,7 @@ namespace ICSharpCode.Reports.Core @@ -37,9 +36,7 @@ namespace ICSharpCode.Reports.Core
base.Bind();
if (base.ReportSettings.GroupColumnsCollection.Count > 0) {
this.Group();
} else {
this.Sort ();
}
@ -78,6 +75,7 @@ namespace ICSharpCode.Reports.Core @@ -78,6 +75,7 @@ namespace ICSharpCode.Reports.Core
}
}
public override bool MoveNext()
{
return base.MoveNext();
@ -167,7 +165,7 @@ namespace ICSharpCode.Reports.Core @@ -167,7 +165,7 @@ namespace ICSharpCode.Reports.Core
string v = element.ObjectArray[0].ToString();
if (compVal != v) {
childList = new IndexList();
GroupComparer gc = GHeader(element);
GroupComparer gc = BuildGroupHeader(element);
gc.IndexList = childList;
GChild(childList,element);
@ -179,7 +177,7 @@ namespace ICSharpCode.Reports.Core @@ -179,7 +177,7 @@ namespace ICSharpCode.Reports.Core
ShowIndexList(base.IndexList);
}
private GroupComparer GHeader (BaseComparer sc)
private GroupComparer BuildGroupHeader (BaseComparer sc)
{
GroupComparer gc = new GroupComparer(sc.ColumnCollection,sc.ListIndex,sc.ObjectArray);
base.IndexList.Add(gc);
@ -190,7 +188,6 @@ namespace ICSharpCode.Reports.Core @@ -190,7 +188,6 @@ namespace ICSharpCode.Reports.Core
private void GChild(IndexList list,BaseComparer sc)
{
string v = sc.ObjectArray[0].ToString();
// Console.WriteLine("child {0}",v);
list.Add(sc);
}
@ -239,6 +236,30 @@ namespace ICSharpCode.Reports.Core @@ -239,6 +236,30 @@ namespace ICSharpCode.Reports.Core
}
public object myCurrent (int pos)
{
return this.table.Rows[pos];
}
public CurrentItemsCollection FillDataRow(int pos)
{
CurrentItemsCollection ci = new CurrentItemsCollection();
DataRow row = this.table.Rows[pos] as DataRow;
if (row != null) {
CurrentItem c = null;
foreach (DataColumn dc in table.Columns)
{
c = new CurrentItem();
c.ColumnName = dc.ColumnName;
c.DataType = dc.DataType;
c.Value = row[dc.ColumnName];
ci.Add(c);
}
}
return ci;
}
#endregion
@ -277,10 +298,10 @@ namespace ICSharpCode.Reports.Core @@ -277,10 +298,10 @@ namespace ICSharpCode.Reports.Core
int cr = base.CurrentPosition;
int li = (base.IndexList[cr] ).ListIndex;
return this.table.Rows[li];
// return this.view[((BaseComparer)base.IndexList[base.CurrentRow]).ListIndex];
}
}
public override int CurrentPosition {
get { return base.CurrentPosition; }
set { base.CurrentPosition = value; }
@ -292,5 +313,11 @@ namespace ICSharpCode.Reports.Core @@ -292,5 +313,11 @@ namespace ICSharpCode.Reports.Core
}
#endregion
public DataRow Readrandowm (int pos)
{
return this.table.Rows[pos];
}
}
}

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

@ -0,0 +1,166 @@ @@ -0,0 +1,166 @@
/*
* Erstellt mit SharpDevelop.
* Benutzer: Peter
* Datum: 02.01.2009
* Zeit: 17:33
*
* Sie können diese Vorlage unter Extras > Optionen > Codeerstellung > Standardheader ändern.
*/
using System;
using System.Collections.Generic;
using System.Drawing;
using ICSharpCode.Reports.Core.BaseClasses.Printing;
using ICSharpCode.Reports.Core.Interfaces;
namespace ICSharpCode.Reports.Core.Exporter
{
/// <summary>
/// Description of RowConverter.
/// </summary>
///
public class RowConverter:BaseConverter
{
private BaseReportItem parent;
public RowConverter(IDataNavigator dataNavigator,
ExporterPage singlePage,
ILayouter layouter):base(dataNavigator,singlePage,layouter)
{
}
public override ExporterCollection Convert(BaseReportItem parent, BaseReportItem item)
{
if (parent == null) {
throw new ArgumentNullException("parent");
}
if (item == null) {
throw new ArgumentNullException("item");
}
ISimpleContainer simpleContainer = item as ISimpleContainer;
this.parent = parent;
simpleContainer.Parent = parent;
PrintHelper.AdjustParent(parent,simpleContainer.Items);
if (PrintHelper.IsTextOnlyRow(simpleContainer)) {
ExporterCollection myList = new ExporterCollection();
base.BaseConvert (myList,simpleContainer,parent.Location.X,
new Point(base.SectionBounds.DetailStart.X,base.SectionBounds.DetailStart.Y));
return myList;
} else {
return this.ConvertDataRow(simpleContainer);
}
}
private ExporterCollection ConvertDataRow (ISimpleContainer simpleContainer)
{
ExporterCollection mylist = new ExporterCollection();
Point currentPosition = new Point(base.SectionBounds.DetailStart.X,base.SectionBounds.DetailStart.Y);
BaseSection section = parent as BaseSection;
int defaultLeftPos = parent.Location.X;
do {
PrintHelper.AdjustSectionLocation (section);
section.Size = this.SectionBounds.DetailSectionRectangle.Size;
base.SaveSize(section.Items[0].Size);
Color color = ((BaseReportItem)simpleContainer).BackColor;
if (base.DataNavigator.HasChildren)
{
TestDecorateElement(simpleContainer);
}
base.FillRow(simpleContainer);
PrepareContainerForConverting(simpleContainer);
base.FireSectionRendering(section);
currentPosition = base.BaseConvert(mylist,simpleContainer,defaultLeftPos,currentPosition);
AfterConverting (mylist,section);
// Grouping starts ------------------------
if (base.DataNavigator.HasChildren) {
//((BaseReportItem)simpleContainer).BackColor = color;
StandardPrinter.AdjustBackColor(simpleContainer,GlobalValues.DefaultBackColor);
base.DataNavigator.SwitchGroup();
do {
((BaseReportItem)simpleContainer).BackColor = color;
base.DataNavigator.FillChild(simpleContainer.Items);
PrepareContainerForConverting(simpleContainer);
base.FireSectionRendering(section);
currentPosition = base.BaseConvert(mylist,simpleContainer,defaultLeftPos,currentPosition);
AfterConverting (mylist,section);
}
while ( base.DataNavigator.ChildMoveNext());
}
// end grouping -----------------
if (PrintHelper.IsPageFull(new Rectangle(new Point (simpleContainer.Location.X,currentPosition.Y), section.Size),base.SectionBounds)) {
base.FirePageFull(mylist);
section.SectionOffset = base.SinglePage.SectionBounds.PageHeaderRectangle.Location.Y;
currentPosition = new Point(base.SectionBounds.PageHeaderRectangle.X,base.SectionBounds.PageHeaderRectangle.Y);
mylist.Clear();
}
ShouldDrawBorder (section,mylist);
}
while (base.DataNavigator.MoveNext());
SectionBounds.ReportFooterRectangle = new Rectangle(SectionBounds.ReportFooterRectangle.Left,
section.Location.Y + section.Size.Height,
SectionBounds.ReportFooterRectangle.Width,
SectionBounds.ReportFooterRectangle.Height);
return mylist;
}
void PrepareContainerForConverting(ISimpleContainer simpleContainer)
{
base.LayoutRow(simpleContainer);
}
void AfterConverting (ExporterCollection mylist,BaseSection section)
{
StandardPrinter.EvaluateRow(base.Evaluator,mylist);
section.Items[0].Size = base.RestoreSize;
section.SectionOffset += section.Size.Height + 3 * GlobalValues.GapBetweenContainer;
}
Color TestDecorateElement(ISimpleContainer simpleContainer)
{
BaseReportItem i = simpleContainer as BaseReportItem;
var retval = i.BackColor;
i.BackColor = System.Drawing.Color.LightGray;
return retval;
}
void ShouldDrawBorder (BaseSection section,ExporterCollection list)
{
if (section.DrawBorder == true) {
BaseRectangleItem br = BasePager.CreateDebugItem (section);
BaseExportColumn bec = br.CreateExportColumn();
bec.StyleDecorator.Location = section.Location;
list.Insert(0,bec);
}
}
}
}

3
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/TableConverter.cs

@ -82,8 +82,7 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -82,8 +82,7 @@ namespace ICSharpCode.Reports.Core.Exporter
do {
//
BaseSection section = this.baseTable.Parent as BaseSection;
section.Location = new Point(section.Location.X,section.SectionOffset );
PrintHelper.AdjustSectionLocation(section);
base.FillRow(simpleContainer);
StandardPrinter.EvaluateRow(base.Evaluator,mylist);

24
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/RowConverter.cs → src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/old_GroupedRowConverter.cs

@ -20,12 +20,12 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -20,12 +20,12 @@ namespace ICSharpCode.Reports.Core.Exporter
/// </summary>
///
public class RowConverter:BaseConverter
public class old_RowConverter:BaseConverter
{
private BaseReportItem parent;
public RowConverter(IDataNavigator dataNavigator,
public old_RowConverter(IDataNavigator dataNavigator,
ExporterPage singlePage,
ILayouter layouter):base(dataNavigator,singlePage,layouter)
@ -68,14 +68,17 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -68,14 +68,17 @@ namespace ICSharpCode.Reports.Core.Exporter
int defaultLeftPos = parent.Location.X;
do {
Console.WriteLine ("haschild {0}",base.DataNavigator.HasChildren);
if (base.DataNavigator.HasChildren) {
ReadFromChilds(base.DataNavigator);
}
section.Location = new Point(section.Location.X,section.SectionOffset );
section.Size = this.SectionBounds.DetailSectionRectangle.Size;
base.SaveSize(section.Items[0].Size);
base.FillRow(simpleContainer);
base.LayoutRow(simpleContainer);
base.FireSectionRendering(section);
@ -111,5 +114,16 @@ namespace ICSharpCode.Reports.Core.Exporter @@ -111,5 +114,16 @@ namespace ICSharpCode.Reports.Core.Exporter
return mylist;
}
void ReadFromChilds (IDataNavigator nav)
{
// nav.SwitchGroup();
// do {
// var o = nav.ReadChild() as System.Data.DataRow;
// string v = o.ItemArray[3].ToString();
// Console.WriteLine("\t {0}",v);
// }
// while ( nav.ChildMoveNext());
}
}
}
}

42
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Interfaces/IDataNavigator.cs

@ -22,31 +22,39 @@ using System.ComponentModel; @@ -22,31 +22,39 @@ using System.ComponentModel;
get;
}
/*
bool HasChildren {
get;
}
*/
#region Try make recursive with ChildNavigator
bool IsSorted {get;}
IDataNavigator GetChildNavigator();
bool IsGrouped {get;}
#endregion
int CurrentRow {
get;
}
// childList -----------------
int Count {
get;
}
bool HasChildren {get;}
object Current {
get;
}
void SwitchGroup();
bool ChildMoveNext();
int ChildListCount {get;}
void FillChild (ReportItemCollection collection);
// end child list --------------------
bool IsSorted {get;}
bool IsGrouped {get;}
int CurrentRow {get;}
int Count {get;}
object Current {get;}
AvailableFieldsCollection AvailableFields{get;}
System.Collections.IEnumerator RangeEnumerator(int start, int end);
// System.Collections.IEnumerator RangeEnumerator(int start, int end);
}
}

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

@ -35,31 +35,148 @@ namespace ICSharpCode.Reports.Core.Test.DataManager @@ -35,31 +35,148 @@ namespace ICSharpCode.Reports.Core.Test.DataManager
[Test]
public void GroupingCollection_Contains_IsGrouped_False()
{
GroupColumn gc = new GroupColumn("GroupItem",1,ListSortDirection.Ascending);
ReportSettings rs = new ReportSettings();
rs.GroupColumnsCollection.Add(gc);
IDataManager dm = ICSharpCode.Reports.Core.DataManager.CreateInstance(this.table,rs);
DataNavigator dataNav = dm.GetNavigator;
var dataNav = PrepareStandardGrouping();
Assert.That(dataNav.IsGrouped == true);
}
[Test]
public void aaa()
public void Has_Children()
{
var dataNav = PrepareStandardGrouping();
while (dataNav.MoveNext()) {
Assert.That(dataNav.HasChildren,Is.True);
}
}
[Test]
public void Can_Read_Child_Count ()
{
var dataNav = PrepareStandardGrouping();
while (dataNav.MoveNext())
{
Assert.That(dataNav.ChildListCount,Is.GreaterThan(0));
}
}
#region Read-Fill Child List
[Test]
public void Can_FillChild()
{
var dataNav = PrepareStandardGrouping();
while (dataNav.MoveNext()) {
if (dataNav.HasChildren) {
Assert.That(dataNav.HasChildren,Is.True);
DataRow r = dataNav.Current as DataRow;
string v2 = r["last"].ToString() + " GroupVal :" + r[3].ToString();
Console.WriteLine(v2);
FillChildList(dataNav);
}
}
}
void FillChildList (IDataNavigator nav)
{
BaseDataItem first= new BaseDataItem("First");
BaseDataItem last = new BaseDataItem("Last");
ReportItemCollection ric = new ReportItemCollection();
IDataManager dm = ICSharpCode.Reports.Core.DataManager.CreateInstance(this.table,new ReportSettings());
DataNavigator dataNav = dm.GetNavigator;
ric.Add(first);
ric.Add(last);
nav.SwitchGroup();
do {
nav.FillChild(ric);
foreach (BaseDataItem element in ric) {
Console.WriteLine("\t{0} - {1}",element.ColumnName,element.DBValue);
}
}
while ( nav.ChildMoveNext());
}
#endregion
#region Try make recursive with ChildNavigator
[Test]
public void Can_Get_ChildNavigator ()
{
var dataNav = PrepareStandardGrouping();
while (dataNav.MoveNext()) {
DataRow r = dataNav.Current as DataRow;
string v2 = r["Groupitem"].ToString();
if (dataNav.HasChildren) {
IDataNavigator child = dataNav.GetChildNavigator();
Assert.That (child,Is.Not.Null);
}
}
}
[Test]
public void RecursiveCall_Childs ()
{
var dataNav = PrepareStandardGrouping();
dataNav.MoveNext();
Console.WriteLine("--------------start rec ------------");
reccall (dataNav);
Console.WriteLine("--------------end rec ------------");
}
private void reccall (IDataNavigator startNavigator)
{
do
{
DataRow r = startNavigator.Current as DataRow;
string v1 = r["last"].ToString() + " :" + r[3].ToString();
Console.WriteLine("\t {0}",v1);
if (startNavigator.HasChildren) {
IDataNavigator child = startNavigator.GetChildNavigator();
Console.WriteLine("header {0} - Child_Count:{1}",v1,child.Count);
reccall (child);
}
} while (startNavigator.MoveNext());
}
private void reccall_1 (IDataNavigator startNavigator)
{
Console.WriteLine("start rec ");
do
{
DataRow r = startNavigator.Current as DataRow;
string v1 = r["last"].ToString() + " :" + r[3].ToString();
Console.WriteLine(v1);
if (startNavigator.HasChildren) {
IDataNavigator child = startNavigator.GetChildNavigator();
if (child.HasChildren) {
do {
Console.WriteLine ("children");
//reccall (child);
}
while (child.MoveNext()) ;
}
}
} while (startNavigator.MoveNext());
}
#endregion
private IDataNavigator PrepareStandardGrouping ()
{
GroupColumn gc = new GroupColumn("GroupItem",1,ListSortDirection.Ascending);
ReportSettings rs = new ReportSettings();
rs.GroupColumnsCollection.Add(gc);
IDataManager dm = ICSharpCode.Reports.Core.DataManager.CreateInstance(this.table,rs);
return dm.GetNavigator;
}
[TestFixtureSetUp]
public void Init()
{

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

@ -301,7 +301,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager @@ -301,7 +301,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager
#endregion
#region RangeEnumerator
/*
[Test]
public void RangeEnumeratorFromBeginToEnd()
{
@ -355,7 +355,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager @@ -355,7 +355,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager
}
Assert.AreEqual(start -1,dn.CurrentRow);
}
*/
#endregion
#region Setup/TearDown

2
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/Strategy/TableStrategyFixture.cs

@ -48,7 +48,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager.Strategy @@ -48,7 +48,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager.Strategy
public void CanGroup_All_Elements_are_GroupComparer ()
{
GroupColumn groupComparer = new GroupColumn("GroupItem",1,ListSortDirection.Ascending);
TableStrategy tableStrategy =GroupTableStrategyFactory (groupComparer);
TableStrategy tableStrategy = GroupTableStrategyFactory (groupComparer);
tableStrategy.Bind();
foreach (BaseComparer element in tableStrategy.IndexList)
{

7
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/TableDataManagerFixture.cs

@ -181,7 +181,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager @@ -181,7 +181,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager
#region Standart Enumerator
/*
[Test]
public void IEnumerableStartFromBegin ()
{
@ -200,7 +200,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager @@ -200,7 +200,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager
Assert.AreEqual(this.table.Rows.Count,start);
Assert.IsFalse(dn.HasMoreData);
}
*/
[Test]
public void EnumeratorStartFromBegin ()
@ -222,7 +222,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager @@ -222,7 +222,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager
#endregion
#region RangeEnumerator
/*
[Test]
public void RangeEnumeratorStartFromBegin ()
{
@ -278,6 +278,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager @@ -278,6 +278,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager
}
Assert.AreEqual(start -1,dn.CurrentRow);
}
*/
#endregion

1
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/IntegrationTests/AggregateFunctionsFixture.cs

@ -19,6 +19,7 @@ using System.Xml; @@ -19,6 +19,7 @@ using System.Xml;
namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests
{
[TestFixture]
[SetCulture("de-DE")]
public class AggregateFunctionsFromTableFixture
{

1
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/IntegrationTests/AggregateFunctionsFromIListFixture.cs

@ -17,6 +17,7 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests @@ -17,6 +17,7 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests
{
[TestFixture]
[SetCulture("de-DE")]
public class AggregateFunctionsFromIListFixture
{
private IExpressionEvaluatorFacade evaluator;

4
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/IntegrationTests/ConcatFieldsFixture.cs

@ -62,11 +62,11 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests @@ -62,11 +62,11 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests
[Test]
[Ignore]
// [Ignore]
public void Unkown_ColumnName ()
{
const string expression = "=Fields!Unknown";
Assert.That(this.evaluator.Evaluate(expression), Is.EqualTo("Name"));
Assert.That(this.evaluator.Evaluate(expression), Is.EqualTo("Unknown"));
}

Loading…
Cancel
Save