Browse Source

Fixed problem in Reports with RowItems, refactoring of Loading Reports

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.0@1447 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Peter Forstmeier 20 years ago
parent
commit
55c97529b6
  1. 3
      src/AddIns/Misc/SharpReport/SharpReport/Designer/Factories.cs
  2. 20
      src/AddIns/Misc/SharpReport/SharpReport/Designer/IDesignerVisitor.cs
  3. 21
      src/AddIns/Misc/SharpReport/SharpReport/Designer/IVisitor.cs
  4. 9
      src/AddIns/Misc/SharpReport/SharpReport/Designer/SectionControls/BaseDesignerControl.cs
  5. 3
      src/AddIns/Misc/SharpReport/SharpReport/SharpReport.csproj
  6. 2
      src/AddIns/Misc/SharpReport/SharpReport/SharpReportManager.cs
  7. 77
      src/AddIns/Misc/SharpReport/SharpReport/Visitors/AbstractVisitor.cs
  8. 63
      src/AddIns/Misc/SharpReport/SharpReport/Visitors/LoadReportVisitor.cs
  9. 15
      src/AddIns/Misc/SharpReport/SharpReport/Visitors/SaveReportVisitor.cs
  10. 1
      src/AddIns/Misc/SharpReport/SharpReportCore/BaseItems/BaseDataItem.cs
  11. 13
      src/AddIns/Misc/SharpReport/SharpReportCore/BaseItems/RowItem.cs
  12. 38
      src/AddIns/Misc/SharpReport/SharpReportCore/DataManager/DataManager.cs
  13. 32
      src/AddIns/Misc/SharpReport/SharpReportCore/DataManager/DataNavigator.cs
  14. 4
      src/AddIns/Misc/SharpReport/SharpReportCore/DataManager/ListStrategy/CollectionStrategy.cs
  15. 10
      src/AddIns/Misc/SharpReport/SharpReportCore/DataManager/ListStrategy/TableStrategy.cs
  16. 10
      src/AddIns/Misc/SharpReport/SharpReportCore/Printing/AbstractDataRenderer.cs
  17. 4
      src/AddIns/Misc/SharpReport/SharpReportCore/Printing/AbstractRenderer.cs
  18. 7
      src/AddIns/Misc/SharpReport/SharpReportCore/Printing/RenderDataReport.cs
  19. 6
      src/AddIns/Misc/SharpReport/SharpReportCore/ReportModel.cs
  20. 2
      src/AddIns/Misc/SharpReport/SharpReportCore/SharpReportEngine.cs
  21. 67
      src/AddIns/Misc/SharpReport/SharpReportCore/Visitors/AbstractModelVisitor.cs
  22. 19
      src/AddIns/Misc/SharpReport/SharpReportCore/Visitors/IVisitor.cs
  23. 84
      src/AddIns/Misc/SharpReport/SharpReportCore/Visitors/LoadModelVisitor.cs

3
src/AddIns/Misc/SharpReport/SharpReport/Designer/Factories.cs

@ -38,7 +38,8 @@ namespace SharpReport.Designer {
public class IDesignableFactory : SharpReportCore.GenericFactory { public class IDesignableFactory : SharpReportCore.GenericFactory {
public IDesignableFactory() :base(Assembly.GetExecutingAssembly(),typeof(IDesignable)){ public IDesignableFactory() :base(Assembly.GetExecutingAssembly(),
typeof(IDesignable)){
} }
public new BaseReportItem Create(string name) { public new BaseReportItem Create(string name) {

20
src/AddIns/Misc/SharpReport/SharpReport/Designer/IDesignerVisitor.cs

@ -1,20 +0,0 @@
/*
* Created by SharpDevelop.
* User: Forstmeier Helmut
* Date: 10.08.2005
* Time: 22:14
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
/// <summary>
/// Each DesignControl Visitor has to implement this Interface
/// </summary>
using System;
namespace SharpReport.Designer{
public interface IDesignerVisitor {
void Visit (SharpReport.Designer.BaseDesignerControl designer);
}
}

21
src/AddIns/Misc/SharpReport/SharpReport/Designer/IVisitor.cs

@ -1,21 +0,0 @@
/*
* Created by SharpDevelop.
* User: Forstmeier Peter
* Date: 10.08.2005
* Time: 13:38
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using SharpReport.Designer;
namespace SharpReport.Designer{
/// <summary>
/// Implemented in SharpReportDesigner
/// </summary>
public interface IVisitor{
void Accept(IDesignerVisitor visitor);
}
}

9
src/AddIns/Misc/SharpReport/SharpReport/Designer/SectionControls/BaseDesignerControl.cs

@ -21,7 +21,7 @@ namespace SharpReport.Designer{
/// <summary> /// <summary>
/// Description of BaseDesignerControl. /// Description of BaseDesignerControl.
/// </summary> /// </summary>
public class BaseDesignerControl : System.Windows.Forms.UserControl,SharpReport.Designer.IVisitor public class BaseDesignerControl : UserControl,SharpReportCore.IVisitor
{ {
private SharpReport.Designer.Report reportControl; private SharpReport.Designer.Report reportControl;
private Ruler.ctrlRuler ctrlRuler1; private Ruler.ctrlRuler ctrlRuler1;
@ -118,9 +118,12 @@ namespace SharpReport.Designer{
#endregion #endregion
#region SharpReport.DelegatesInterfaces.IVisitor interface implementation #region SharpReport.DelegatesInterfaces.IVisitor interface implementation
public void Accept(IDesignerVisitor visitor) {
visitor.Visit(this); public void Accept(IModelVisitor visitor){
SharpReportCore.IModelVisitor v = visitor as SharpReportCore.IModelVisitor;
v.Visit(this);
} }
#endregion #endregion

3
src/AddIns/Misc/SharpReport/SharpReport/SharpReport.csproj

@ -62,8 +62,6 @@
<Compile Include="Designer\VisualControls\ReportTextControl.cs" /> <Compile Include="Designer\VisualControls\ReportTextControl.cs" />
<Compile Include="Designer\Factories.cs" /> <Compile Include="Designer\Factories.cs" />
<Compile Include="Designer\IDesignable.cs" /> <Compile Include="Designer\IDesignable.cs" />
<Compile Include="Designer\IDesignerVisitor.cs" />
<Compile Include="Designer\IVisitor.cs" />
<Compile Include="Designer\NameService.cs" /> <Compile Include="Designer\NameService.cs" />
<Compile Include="Designer\Report.cs" /> <Compile Include="Designer\Report.cs" />
<Compile Include="Designer\XmlHelpers.cs" /> <Compile Include="Designer\XmlHelpers.cs" />
@ -76,7 +74,6 @@
<Compile Include="ReportItems\TextBased\ItemsHelper.cs" /> <Compile Include="ReportItems\TextBased\ItemsHelper.cs" />
<Compile Include="ReportItems\TextBased\ReportDataItem.cs" /> <Compile Include="ReportItems\TextBased\ReportDataItem.cs" />
<Compile Include="ReportItems\TextBased\ReportTextItem.cs" /> <Compile Include="ReportItems\TextBased\ReportTextItem.cs" />
<Compile Include="Visitors\AbstractVisitor.cs" />
<Compile Include="Visitors\LoadReportVisitor.cs" /> <Compile Include="Visitors\LoadReportVisitor.cs" />
<Compile Include="Visitors\SaveReportVisitor.cs" /> <Compile Include="Visitors\SaveReportVisitor.cs" />
<Compile Include="AutoReport.cs" /> <Compile Include="AutoReport.cs" />

2
src/AddIns/Misc/SharpReport/SharpReport/SharpReportManager.cs

@ -261,7 +261,7 @@ namespace SharpReport{
public void SaveToFile(string fileName){ public void SaveToFile(string fileName){
try { try {
SharpReport.Visitors.SaveReportVisitor saveVisitor = new SharpReport.Visitors.SaveReportVisitor(); SharpReport.Visitors.SaveReportVisitor saveVisitor = new SharpReport.Visitors.SaveReportVisitor();
this.baseDesignerControl.Accept (saveVisitor); this.baseDesignerControl.Accept ((SharpReportCore.IModelVisitor)saveVisitor);
XmlDocument xmlDoc = saveVisitor.XmlDocument; XmlDocument xmlDoc = saveVisitor.XmlDocument;
XmlTextWriter xw = new XmlTextWriter (fileName,System.Text.Encoding.UTF8); XmlTextWriter xw = new XmlTextWriter (fileName,System.Text.Encoding.UTF8);
xmlDoc.PreserveWhitespace = true; xmlDoc.PreserveWhitespace = true;

77
src/AddIns/Misc/SharpReport/SharpReport/Visitors/AbstractVisitor.cs

@ -1,77 +0,0 @@
//------------------------------------------------------------------------------
// <autogenerated>
// This code was generated by a tool.
// Runtime Version: 1.1.4322.2032
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </autogenerated>
//------------------------------------------------------------------------------
using System;
using System.Xml;
using SharpReport.Designer;
using SharpReportCore;
namespace SharpReport.Visitors
{
/// <summary>
/// Abstract Class for Designer Visitor
/// </summary>
/// <remarks>
/// created by - Forstmeier Peter
/// created on - 02.12.2004 16:53:00
/// </remarks>
public class AbstractVisitor : object, SharpReport.Designer.IDesignerVisitor {
private readonly string nodesQuery = "controls/control";
private string fileName;
private XmlFormReader xmlFormReader;
public AbstractVisitor() {
}
public AbstractVisitor(string fileName){
this.fileName = fileName;
xmlFormReader = new XmlFormReader() ;
}
/// <summary>
/// All classes how use this baseclass have to override this method
/// </summary>
/// <remarks>
/// Interface method from IDesignerVisitor
///
/// </remarks>
public virtual void Visit(SharpReport.Designer.BaseDesignerControl designer) {
}
#region Properties
protected string FileName {
get {
return fileName;
}
}
protected XmlFormReader XmlFormReader {
get {
return xmlFormReader;
}
}
protected string NodesQuery {
get {
return nodesQuery;
}
}
#endregion
}
}

63
src/AddIns/Misc/SharpReport/SharpReport/Visitors/LoadReportVisitor.cs

@ -28,9 +28,9 @@ using SharpReport.ReportItems;
namespace SharpReport.Visitors { namespace SharpReport.Visitors {
public class LoadReportVisitor : SharpReport.Visitors.AbstractVisitor {
public class LoadReportVisitor : SharpReportCore.AbstractModelVisitor {
SharpReport.Designer.BaseDesignerControl designer; SharpReport.Designer.BaseDesignerControl baseDesigner;
IDesignableFactory designableFactory ; IDesignableFactory designableFactory ;
public LoadReportVisitor(string fileName):base(fileName) { public LoadReportVisitor(string fileName):base(fileName) {
@ -41,16 +41,19 @@ namespace SharpReport.Visitors {
/// Loads ReportDefinition from File and set the values in the SharpReportDesigner /// Loads ReportDefinition from File and set the values in the SharpReportDesigner
/// </summary> /// </summary>
/// <param name='designer'>SharpReportDesigner</param> /// <param name='designer'>SharpReportDesigner</param>
public override void Visit(System.Windows.Forms.Control designer){
public override void Visit(SharpReport.Designer.BaseDesignerControl designer){
if (designer == null) { if (designer == null) {
throw new ArgumentNullException("designer"); throw new ArgumentNullException("designer");
} }
this.baseDesigner = designer as SharpReport.Designer.BaseDesignerControl;
if (this.baseDesigner == null) {
throw new ArgumentException("designer");
}
XmlDocument xmlDoc; XmlDocument xmlDoc;
try { try {
xmlDoc = XmlHelper.OpenSharpReport (base.FileName); xmlDoc = XmlHelper.OpenSharpReport (base.FileName);
this.designer = designer;
SetDesigner (xmlDoc); SetDesigner (xmlDoc);
AdjustSectionsWidth(); AdjustSectionsWidth();
} catch (Exception ) { } catch (Exception ) {
@ -60,41 +63,36 @@ namespace SharpReport.Visitors {
} }
private void AdjustSectionsWidth() { private void AdjustSectionsWidth() {
foreach (ReportSection section in designer.SectionsCollection) { foreach (ReportSection section in baseDesigner.SectionsCollection) {
section.VisualControl.Width = designer.ReportModel.ReportSettings.PageSettings.Bounds.Width; section.VisualControl.Width = baseDesigner.ReportModel.ReportSettings.PageSettings.Bounds.Width;
if (section.SectionMargin == 0) { if (section.SectionMargin == 0) {
section.SectionMargin = designer.ReportModel.ReportSettings.PageSettings.Bounds.Left; section.SectionMargin = baseDesigner.ReportModel.ReportSettings.PageSettings.Bounds.Left;
} }
} }
} }
private void SetDesigner (XmlDocument doc){ private void SetDesigner (XmlDocument doc){
this.designer.ReportModel.ReportSettings.SetSettings ((XmlElement)doc.DocumentElement.FirstChild); this.baseDesigner.ReportModel.ReportSettings.SetSettings ((XmlElement)doc.DocumentElement.FirstChild);
SetSections (doc); SetSections (doc);
} }
private void SetSections (XmlDocument doc) { private void SetSections (XmlDocument doc) {
XmlNodeList sectionNodes = doc.DocumentElement.ChildNodes; XmlNodeList sectionNodes = doc.DocumentElement.ChildNodes;
//Start with node(1) //Start with node(1)
XmlNode node;
BaseSection baseSection = null;
for (int i = 1;i < sectionNodes.Count ; i++ ) { for (int i = 1;i < sectionNodes.Count ; i++ ) {
node = sectionNodes[i]; XmlNode node = sectionNodes[i];
XmlElement sectionElem = node as XmlElement; XmlElement sectionElem = node as XmlElement;
if (sectionElem != null) { if (sectionElem != null) {
baseSection = (BaseSection)designer.ReportModel.SectionCollection.Find(sectionElem.GetAttribute("name")); BaseSection baseSection = (BaseSection)baseDesigner.ReportModel.SectionCollection.Find(sectionElem.GetAttribute("name"));
if (baseSection != null) {
XmlHelper.SetSectionValues (base.XmlFormReader,sectionElem,baseSection); XmlNodeList ctrlList = base.MakeSection(sectionElem,baseSection);
XmlNodeList ctrlList = sectionElem.SelectNodes (base.NodesQuery); SetReportItems(baseSection,null,ctrlList);
SetReportItems(baseSection,null,ctrlList);
} else {
throw new MissingSectionException();
}
} else { } else {
throw new MissingSectionException(); throw new MissingSectionException();
} }
@ -106,7 +104,6 @@ namespace SharpReport.Visitors {
IContainerItem parentContainer,XmlNodeList ctrlList) { IContainerItem parentContainer,XmlNodeList ctrlList) {
BaseReportItem baseReportItem; BaseReportItem baseReportItem;
//BaseReportItem parentItem;
foreach (XmlNode ctrlNode in ctrlList) { foreach (XmlNode ctrlNode in ctrlList) {
XmlElement ctrlElem = ctrlNode as XmlElement; XmlElement ctrlElem = ctrlNode as XmlElement;
if (ctrlElem != null) { if (ctrlElem != null) {
@ -114,28 +111,12 @@ namespace SharpReport.Visitors {
try { try {
itemRenderer = designableFactory.Create(ctrlElem.GetAttribute("type")); itemRenderer = designableFactory.Create(ctrlElem.GetAttribute("type"));
baseReportItem = (BaseReportItem)itemRenderer; baseReportItem = base.MakeItem(ctrlElem,parentContainer,baseSection,itemRenderer);
baseReportItem.SuspendLayout();
XmlHelper.SetReportItemValues (base.XmlFormReader,ctrlElem,baseReportItem);
if (parentContainer == null) {
baseReportItem.Parent = baseSection;
baseSection.Items.Add (baseReportItem);
} else {
baseReportItem.Parent = parentContainer;
parentContainer.Items.Add(baseReportItem);
}
baseReportItem.ResumeLayout();
IContainerItem iContainer = baseReportItem as IContainerItem; IContainerItem iContainer = baseReportItem as IContainerItem;
if (iContainer != null) { if (iContainer != null) {
XmlNodeList newList = ctrlNode.SelectNodes (base.NodesQuery); XmlNodeList newList = ctrlNode.SelectNodes (base.NodesQuery);
if (newList.Count > 0) { if (newList.Count > 0) {
System.Console.WriteLine("\tLoadReportVisitor recursive call for <{0}> with {1} elements",
baseReportItem.Name,
newList.Count);
SetReportItems (baseSection,iContainer,newList); SetReportItems (baseSection,iContainer,newList);
} }
} }

15
src/AddIns/Misc/SharpReport/SharpReport/Visitors/SaveReportVisitor.cs

@ -20,17 +20,22 @@ namespace SharpReport.Visitors{
/// Description of SaveReportVisitor. /// Description of SaveReportVisitor.
/// </summary> /// </summary>
public class SaveReportVisitor : AbstractVisitor public class SaveReportVisitor :SharpReportCore.AbstractModelVisitor
{ {
private XmlDocument xmlDoc; private XmlDocument xmlDoc;
private SharpReport.Designer.BaseDesignerControl baseDesigner;
public SaveReportVisitor ():base() { public SaveReportVisitor ():base(String.Empty) {
} }
public override void Visit (Control designer) {
public override void Visit (SharpReport.Designer.BaseDesignerControl designer) { this.baseDesigner = designer as SharpReport.Designer.BaseDesignerControl;
xmlDoc = this.BuildReportDocument(designer);
if (this.baseDesigner == null) {
throw new ArgumentException("designer");
}
xmlDoc = this.BuildReportDocument(baseDesigner);
} }
private XmlDocument BuildReportDocument (SharpReport.Designer.BaseDesignerControl designer) { private XmlDocument BuildReportDocument (SharpReport.Designer.BaseDesignerControl designer) {

1
src/AddIns/Misc/SharpReport/SharpReportCore/BaseItems/BaseDataItem.cs

@ -68,6 +68,7 @@ namespace SharpReportCore {
string toPrint = CheckForNullValue(); string toPrint = CheckForNullValue();
base.Text = base.FireFormatOutput(toPrint,this.FormatString,""); base.Text = base.FireFormatOutput(toPrint,this.FormatString,"");
// System.Console.WriteLine("\tBaseDataItem <{0}> / <{1}>",this.Name,this.Text);
base.Render (rpea); base.Render (rpea);
} }

13
src/AddIns/Misc/SharpReport/SharpReportCore/BaseItems/RowItem.cs

@ -35,14 +35,15 @@ namespace SharpReportCore{
public RowItem(string tableName){ public RowItem(string tableName){
this.tableName = tableName; this.tableName = tableName;
this.Items.Added += OnAdded; // this.Items.Added += OnAdded;
} }
/*
void OnAdded (object sender, CollectionItemEventArgs<IItemRenderer> e){ void OnAdded (object sender, CollectionItemEventArgs<IItemRenderer> e){
System.Console.WriteLine(""); System.Console.WriteLine("");
System.Console.WriteLine("RowItem:OnAdded did we use this function???"); System.Console.WriteLine("RowItem:OnAdded did we use this function???");
} }
*/
#region overrides #region overrides
@ -58,8 +59,8 @@ namespace SharpReportCore{
if (rpea == null) { if (rpea == null) {
throw new ArgumentNullException("rpea"); throw new ArgumentNullException("rpea");
} }
System.Console.WriteLine(""); // System.Console.WriteLine("");
System.Console.WriteLine("--Start of {0}",this.ToString()); // System.Console.WriteLine("--Start of {0}",this.ToString());
base.Render(rpea); base.Render(rpea);
RectangleF rect = PrepareRectangle (rpea); RectangleF rect = PrepareRectangle (rpea);
@ -83,8 +84,8 @@ namespace SharpReportCore{
childItem.Render (rpea); childItem.Render (rpea);
childItem.Location = new Point(loc.X,loc.Y); childItem.Location = new Point(loc.X,loc.Y);
} }
System.Console.WriteLine("--End of RowItem"); // System.Console.WriteLine("--End of RowItem");
System.Console.WriteLine(""); // System.Console.WriteLine("");
base.NotiyfyAfterPrint (rpea.LocationAfterDraw); base.NotiyfyAfterPrint (rpea.LocationAfterDraw);
} }

38
src/AddIns/Misc/SharpReport/SharpReportCore/DataManager/DataManager.cs

@ -35,8 +35,8 @@ namespace SharpReportCore {
GroupSeperator groupSeperator; GroupSeperator groupSeperator;
public event EventHandler <ListChangedEventArgs> ListChanged; public event EventHandler <ListChangedEventArgs> ListChanged;
public event EventHandler <GroupChangedEventArgs> GroupChanged; // public event EventHandler <GroupChangedEventArgs> GroupChanged;
public event EventHandler <EventArgs> GroupChanging; // public event EventHandler <EventArgs> GroupChanging;
/// <summary> /// <summary>
/// use this Constructor for PullDataReports /// use this Constructor for PullDataReports
@ -62,7 +62,7 @@ namespace SharpReportCore {
this.dataViewStrategy = new TableStrategy((DataTable)this.dataSource, this.dataViewStrategy = new TableStrategy((DataTable)this.dataSource,
reportSettings); reportSettings);
this.dataViewStrategy.ListChanged += new EventHandler <ListChangedEventArgs> (NotifyListChanged); this.dataViewStrategy.ListChanged += new EventHandler <ListChangedEventArgs> (NotifyListChanged);
this.dataViewStrategy.GroupChanged += new EventHandler<GroupChangedEventArgs> (OnGroupChange); // this.dataViewStrategy.GroupChanged += new EventHandler<GroupChangedEventArgs> (OnGroupChange);
} }
public DataManager(DataTable dataSource, ReportSettings reportSettings){ public DataManager(DataTable dataSource, ReportSettings reportSettings){
@ -272,18 +272,18 @@ namespace SharpReportCore {
} }
private void NotifyGroupChanging () { private void NotifyGroupChanging () {
if (this.GroupChanging!= null) { // if (this.GroupChanging!= null) {
this.GroupChanging (this,EventArgs.Empty); // this.GroupChanging (this,EventArgs.Empty);
} // }
} }
private void NotifyGroupChanged() { private void NotifyGroupChanged() {
if (this.IsGrouped) { if (this.IsGrouped) {
if (this.GroupChanged != null) { // if (this.GroupChanged != null) {
this.GroupChanged (this,new GroupChangedEventArgs(this.groupSeperator)); // this.GroupChanged (this,new GroupChangedEventArgs(this.groupSeperator));
} // }
} }
} }
private void OnGroupChange (object sender,GroupChangedEventArgs e) { private void OnGroupChange (object sender,GroupChangedEventArgs e) {
@ -384,7 +384,6 @@ namespace SharpReportCore {
} }
} }
// Nur zum testen
public DataNavigator GetNavigator { public DataNavigator GetNavigator {
get { get {
@ -393,22 +392,6 @@ namespace SharpReportCore {
} }
/*
public object Current {
get {
throw new NotImplementedException();
}
}
*/
// public void Reset() {
// this.dataViewStrategy.Reset();
// }
//
// public bool MoveNext() {
// return this.dataViewStrategy.MoveNext();
// }
public bool IsGrouped { public bool IsGrouped {
get { get {
@ -427,6 +410,7 @@ namespace SharpReportCore {
return this.dataViewStrategy.IsFiltered; return this.dataViewStrategy.IsFiltered;
} }
} }
#region System.IDisposable interface implementation #region System.IDisposable interface implementation
public void Dispose() { public void Dispose() {
this.Dispose(true); this.Dispose(true);

32
src/AddIns/Misc/SharpReport/SharpReportCore/DataManager/DataNavigator.cs

@ -17,12 +17,16 @@ namespace SharpReportCore
public class DataNavigator :IDataNavigator{ public class DataNavigator :IDataNavigator{
IDataViewStrategy store; IDataViewStrategy store;
public event EventHandler <ListChangedEventArgs> ListChanged; GroupSeperator groupSeperator;
public event EventHandler <ListChangedEventArgs> ListChanged;
// public event EventHandler <EventArgs> GroupChanging;
public event EventHandler <GroupChangedEventArgs> GroupChanged;
public DataNavigator(IDataViewStrategy store){ public DataNavigator(IDataViewStrategy store){
this.store = store; this.store = store;
this.store.ListChanged += new EventHandler<ListChangedEventArgs> (OnListChanged); this.store.ListChanged += new EventHandler<ListChangedEventArgs> (OnListChanged);
this.store.GroupChanged += new EventHandler<GroupChangedEventArgs> (OnGroupChange);
} }
private void OnListChanged (object sender,System.ComponentModel.ListChangedEventArgs e) { private void OnListChanged (object sender,System.ComponentModel.ListChangedEventArgs e) {
@ -31,10 +35,34 @@ namespace SharpReportCore
} }
} }
// private void NotifyGroupChanging () {
// if (this.GroupChanging!= null) {
// this.GroupChanging (this,EventArgs.Empty);
// }
// }
private void NotifyGroupChanged() {
if (this.store.IsGrouped) {
if (this.GroupChanged != null) {
this.GroupChanged (this,new GroupChangedEventArgs(this.groupSeperator));
}
}
}
private void OnGroupChange (object sender,GroupChangedEventArgs e) {
this.groupSeperator = e.GroupSeperator;
this.NotifyGroupChanged();
}
#region IDataNavigator implementation
public void Fill (ReportItemCollection collection) { public void Fill (ReportItemCollection collection) {
// this.NotifyGroupChanging();
this.NotifyGroupChanged();
foreach (IItemRenderer item in collection) { foreach (IItemRenderer item in collection) {
this.store.Fill(item); this.store.Fill(item);
} }
// this.NotifyGroupChanged();
} }
@ -79,5 +107,7 @@ namespace SharpReportCore
return this.store.Current; return this.store.Current;
} }
} }
#endregion
} }
} }

4
src/AddIns/Misc/SharpReport/SharpReportCore/DataManager/ListStrategy/CollectionStrategy.cs

@ -212,13 +212,15 @@ namespace SharpReportCore {
public override void Bind() { public override void Bind() {
base.Bind(); base.Bind();
if ((base.ReportSettings.GroupColumnsCollection != null) && (base.ReportSettings.GroupColumnsCollection.Count > 0)) { // if ((base.ReportSettings.GroupColumnsCollection != null) && (base.ReportSettings.GroupColumnsCollection.Count > 0)) {
if (base.ReportSettings.GroupColumnsCollection.Count > 0) {
this.Group (); this.Group ();
Reset(); Reset();
return; return;
} }
if (base.ReportSettings.SortColumnCollection != null) { if (base.ReportSettings.SortColumnCollection != null) {
// if (base.ReportSettings.SortColumnCollection.Count > 0) {
this.Sort (); this.Sort ();
} }
Reset(); Reset();

10
src/AddIns/Misc/SharpReport/SharpReportCore/DataManager/ListStrategy/TableStrategy.cs

@ -92,8 +92,6 @@ namespace SharpReportCore {
#region Grouping #region Grouping
private void BuildGroup(){ private void BuildGroup(){
try { try {
SharpIndexCollection groupedArray = new SharpIndexCollection(); SharpIndexCollection groupedArray = new SharpIndexCollection();
@ -168,15 +166,14 @@ namespace SharpReportCore {
public override void Bind() { public override void Bind() {
base.Bind(); base.Bind();
if ((base.ReportSettings.GroupColumnsCollection != null) && (base.ReportSettings.GroupColumnsCollection.Count > 0)) { if (base.ReportSettings.GroupColumnsCollection.Count > 0) {
this.Group (); this.Group ();
Reset(); Reset();
return; return;
} }
if (base.ReportSettings.SortColumnCollection != null) {
this.Sort (); this.Sort ();
}
Reset(); Reset();
} }
@ -208,7 +205,7 @@ namespace SharpReportCore {
try { try {
base.Fill(item); base.Fill(item);
if (this.Current == null) { if (this.Current == null) {
System.Console.WriteLine("ow is null"); System.Console.WriteLine("row is null");
} }
if (this.row != null) { if (this.row != null) {
BaseDataItem baseDataItem = item as BaseDataItem; BaseDataItem baseDataItem = item as BaseDataItem;
@ -239,6 +236,7 @@ namespace SharpReportCore {
public override int Count { public override int Count {
get { get {
return this.IndexList.Count; return this.IndexList.Count;
// return this.view.Count;
} }
} }

10
src/AddIns/Misc/SharpReport/SharpReportCore/Printing/AbstractDataRenderer.cs

@ -39,7 +39,6 @@ namespace SharpReportCore{
protected override int RenderSection(BaseSection section, ReportPageEventArgs rpea){ protected override int RenderSection(BaseSection section, ReportPageEventArgs rpea){
bool hasContainer = false; bool hasContainer = false;
IContainerItem container = null; IContainerItem container = null;
foreach (BaseReportItem item in section.Items) { foreach (BaseReportItem item in section.Items) {
@ -54,7 +53,7 @@ namespace SharpReportCore{
} else { } else {
return base.RenderSection(section, rpea); return base.RenderSection(section, rpea);
} }
} }
private int DoContainerControl (BaseSection section, private int DoContainerControl (BaseSection section,
@ -64,7 +63,6 @@ namespace SharpReportCore{
if (container == null) { if (container == null) {
return section.Size.Height; return section.Size.Height;
} }
this.DataNavigator.Fill(container.Items); this.DataNavigator.Fill(container.Items);
Point drawPoint = new Point(0,0); Point drawPoint = new Point(0,0);
if (section.Visible){ if (section.Visible){
@ -81,10 +79,8 @@ namespace SharpReportCore{
} }
if ((section.CanGrow == false)&& (section.CanShrink == false)) { if ((section.CanGrow == false)&& (section.CanShrink == false)) {
return section.Size.Height; return section.Size.Height;
}
}
return drawPoint.Y; return drawPoint.Y;
} }
return drawPoint.Y; return drawPoint.Y;

4
src/AddIns/Misc/SharpReport/SharpReportCore/Printing/AbstractRenderer.cs

@ -219,6 +219,7 @@ namespace SharpReportCore {
protected void DrawSingleItem (ReportPageEventArgs rpea,BaseReportItem item){ protected void DrawSingleItem (ReportPageEventArgs rpea,BaseReportItem item){
item.SuspendLayout(); item.SuspendLayout();
// System.Console.WriteLine("\tDrawSingleItem {0}",item.Name);
item.FormatOutput -= new EventHandler<FormatOutputEventArgs> (FormatBaseReportItem); item.FormatOutput -= new EventHandler<FormatOutputEventArgs> (FormatBaseReportItem);
item.FormatOutput += new EventHandler<FormatOutputEventArgs> (FormatBaseReportItem); item.FormatOutput += new EventHandler<FormatOutputEventArgs> (FormatBaseReportItem);
item.Render(rpea); item.Render(rpea);
@ -227,10 +228,11 @@ namespace SharpReportCore {
// Called by FormatOutPutEvent of the BaseReportItem // Called by FormatOutPutEvent of the BaseReportItem
void FormatBaseReportItem (object sender, FormatOutputEventArgs rpea) { void FormatBaseReportItem (object sender, FormatOutputEventArgs rpea) {
// System.Console.WriteLine("FormatBaseReportItem");
BaseDataItem baseDataItem = sender as BaseDataItem; BaseDataItem baseDataItem = sender as BaseDataItem;
if (baseDataItem != null) { if (baseDataItem != null) {
if (!String.IsNullOrEmpty(baseDataItem.FormatString)) { if (!String.IsNullOrEmpty(baseDataItem.FormatString)) {
rpea.FormatedValue = defaultFormatter.FormatItem (baseDataItem); rpea.FormatedValue = defaultFormatter.FormatItem (baseDataItem);
// System.Console.WriteLine("\tFormated Value = {0}",rpea.FormatedValue); // System.Console.WriteLine("\tFormated Value = {0}",rpea.FormatedValue);
} else { } else {

7
src/AddIns/Misc/SharpReport/SharpReportCore/Printing/RenderDataReport.cs

@ -47,8 +47,8 @@ namespace SharpReportCore {
public RenderDataReport(ReportModel model,DataManager dataManager):base (model,dataManager){ public RenderDataReport(ReportModel model,DataManager dataManager):base (model,dataManager){
base.DataManager.GroupChanged += new EventHandler<GroupChangedEventArgs>(OnGroupChanged); // base.DataManager.GroupChanged += new EventHandler<GroupChangedEventArgs>(OnGroupChanged);
base.DataManager.GroupChanging += new EventHandler <EventArgs> (OnGroupChanging); // base.DataManager.GroupChanging += new EventHandler <EventArgs> (OnGroupChanging);
} }
@ -156,7 +156,7 @@ namespace SharpReportCore {
} }
protected override void BeginPrintPage(object sender, ReportPageEventArgs rpea) { protected override void BeginPrintPage(object sender, ReportPageEventArgs rpea) {
System.Console.WriteLine("!!! Beginprintpage"); System.Console.WriteLine("!!! BeginPrintpage");
if (rpea == null) { if (rpea == null) {
throw new ArgumentNullException("rpea"); throw new ArgumentNullException("rpea");
} }
@ -206,7 +206,6 @@ namespace SharpReportCore {
while (this.dataNavigator.MoveNext()) { while (this.dataNavigator.MoveNext()) {
this.dataNavigator.Fill (base.CurrentSection.Items); this.dataNavigator.Fill (base.CurrentSection.Items);
base.RenderSection (section,rpea); base.RenderSection (section,rpea);
section.SectionOffset = section.SectionOffset + section.Size.Height + 2 * base.Gap; section.SectionOffset = section.SectionOffset + section.Size.Height + 2 * base.Gap;
base.FitSectionToItems (base.CurrentSection,rpea); base.FitSectionToItems (base.CurrentSection,rpea);

6
src/AddIns/Misc/SharpReport/SharpReportCore/ReportModel.cs

@ -32,10 +32,8 @@ namespace SharpReportCore {
using System; using System;
using System.Drawing; using System.Drawing;
using SharpReportCore; using SharpReportCore;
public class ReportModel : object,SharpReportCore.IVisitor,IDisposable{
public class ReportModel : object,SharpReportCore.IModel,IDisposable{
ReportSettings reportSettings; ReportSettings reportSettings;
ReportSectionCollection sectionCollection; ReportSectionCollection sectionCollection;

2
src/AddIns/Misc/SharpReport/SharpReportCore/SharpReportEngine.cs

@ -505,7 +505,7 @@ namespace SharpReportCore {
try { try {
ReportModel model = new ReportModel(); ReportModel model = new ReportModel();
SharpReportCore.LoadModelVisitor modelVisitor = new SharpReportCore.LoadModelVisitor(model,fileName); SharpReportCore.LoadModelVisitor modelVisitor = new SharpReportCore.LoadModelVisitor(model,fileName);
model.Accept (modelVisitor); model.Accept (modelVisitor);
return model; return model;
} catch (Exception) { } catch (Exception) {

67
src/AddIns/Misc/SharpReport/SharpReportCore/Visitors/AbstractModelVisitor.cs

@ -8,7 +8,7 @@
// </autogenerated> // </autogenerated>
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
using System; using System;
using System.Xml;
/// <summary> /// <summary>
/// Base Class for ModelVisitor /// Base Class for ModelVisitor
/// </summary> /// </summary>
@ -18,18 +18,79 @@ using System;
/// </remarks> /// </remarks>
namespace SharpReportCore { namespace SharpReportCore {
public class AbstractModelVisitor : object, SharpReportCore.IModelVisitor { public class AbstractModelVisitor : object, SharpReportCore.IModelVisitor {
private readonly string nodesQuery = "controls/control";
private SharpReportCore.XmlFormReader xmlFormReader;
private string fileName;
// private GenericFactory genericFactory;
/// <summary> /// <summary>
/// Default constructor - initializes all fields to default values /// Default constructor - initializes all fields to default values
/// </summary> /// </summary>
public AbstractModelVisitor() {
public AbstractModelVisitor(string fileName){
this.fileName = fileName;
xmlFormReader = new XmlFormReader() ;
}
protected XmlNodeList MakeSection (XmlElement sectionElem,BaseSection baseSection) {
if (baseSection == null) {
throw new MissingSectionException();
}
baseSection.SuspendLayout();
XmlHelper.SetSectionValues (xmlFormReader,sectionElem,baseSection);
baseSection.ResumeLayout();
return BuildControlList(sectionElem);
}
protected BaseReportItem MakeItem (XmlElement elem,IContainerItem parent,
BaseSection section,IItemRenderer itemRenderer) {
BaseReportItem item = (BaseReportItem)itemRenderer;
item.SuspendLayout();
XmlHelper.SetReportItemValues (xmlFormReader,elem,item);
if (parent == null) {
item.Parent = section;
section.Items.Add (item);
} else {
item.Parent = parent;
parent.Items.Add(item);
}
item.ResumeLayout();
return item;
} }
protected XmlNodeList BuildControlList(XmlElement section) {
return section.SelectNodes (this.nodesQuery);
}
protected string NodesQuery {
get {
return nodesQuery;
}
}
protected XmlFormReader XmlFormReader {
get {
return xmlFormReader;
}
}
protected string FileName {
get {
return fileName;
}
}
#region SharpReport.DelegatesInterfaces.IModelVisitor interface implementation #region SharpReport.DelegatesInterfaces.IModelVisitor interface implementation
public virtual void Visit(SharpReportCore.ReportModel reportModel) { public virtual void Visit(SharpReportCore.ReportModel reportModel) {
throw new NotImplementedException();
}
public virtual void Visit (System.Windows.Forms.Control designer){
throw new NotImplementedException();
} }
#endregion #endregion

19
src/AddIns/Misc/SharpReport/SharpReportCore/Visitors/IVisitor.cs

@ -11,13 +11,24 @@ using System;
namespace SharpReportCore{ namespace SharpReportCore{
public interface IModel{ /// <summary>
void Accept(IModelVisitor visitor); /// Used by <see cref="SharpReport.Designer.BaseDesignerControl"></see>
} /// </summary>
public interface IVisitor{
void Accept(SharpReportCore.IModelVisitor visitor);
}
public interface IModelVisitor{ public interface IModelVisitor{
///<summary>
/// Use this function to Visit from ReportEngine
/// </summary>
void Visit (SharpReportCore.ReportModel reportModel); void Visit (SharpReportCore.ReportModel reportModel);
///<summary>
/// This function is used by the Designer
/// </summary>
void Visit (System.Windows.Forms.Control designer);
} }
} }

84
src/AddIns/Misc/SharpReport/SharpReportCore/Visitors/LoadModelVisitor.cs

@ -25,13 +25,11 @@ using SharpReportCore;
namespace SharpReportCore { namespace SharpReportCore {
public class LoadModelVisitor : SharpReportCore.AbstractModelVisitor { public class LoadModelVisitor : SharpReportCore.AbstractModelVisitor {
private string fileName;
private ReportModel model; private ReportModel model;
SharpReportCore.XmlFormReader xmlFormReader;
BaseItemFactory baseItemFactory; BaseItemFactory baseItemFactory;
public LoadModelVisitor(ReportModel reportModel,string fileName){ public LoadModelVisitor(ReportModel reportModel,
this.fileName = fileName; string fileName):base(fileName){
this.model = reportModel; this.model = reportModel;
baseItemFactory = new BaseItemFactory(); baseItemFactory = new BaseItemFactory();
} }
@ -40,12 +38,11 @@ namespace SharpReportCore {
#region overrides #region overrides
public override void Visit(ReportModel reportModel) { public override void Visit(ReportModel reportModel) {
if (reportModel == null) { if (reportModel == null) {
throw new MissingModelException(); throw new ArgumentNullException("reportModel");
} else { } else {
XmlDocument xmlDoc; XmlDocument xmlDoc;
try { try {
xmlDoc = XmlHelper.OpenSharpReport (fileName); xmlDoc = XmlHelper.OpenSharpReport (base.FileName);
xmlFormReader = new XmlFormReader();
reportModel.ReportSettings.SetSettings ((XmlElement)xmlDoc.DocumentElement.FirstChild); reportModel.ReportSettings.SetSettings ((XmlElement)xmlDoc.DocumentElement.FirstChild);
SetSections (xmlDoc); SetSections (xmlDoc);
} catch (Exception ) { } catch (Exception ) {
@ -60,48 +57,51 @@ namespace SharpReportCore {
void SetSections (XmlDocument doc) { void SetSections (XmlDocument doc) {
XmlNodeList sectionNodes = doc.DocumentElement.ChildNodes; XmlNodeList sectionNodes = doc.DocumentElement.ChildNodes;
//Start with node(1) //Start with node(1)
XmlNode node;
BaseSection baseSection;
for (int i = 1;i < sectionNodes.Count ; i++ ) { for (int i = 1;i < sectionNodes.Count ; i++ ) {
node = sectionNodes[i]; XmlNode node = sectionNodes[i];
if (node is XmlElement) { if (node is XmlElement) {
XmlElement sectionElem = (XmlElement)node; XmlElement sectionElem = (XmlElement)node;
baseSection = (BaseSection)model.SectionCollection.Find(sectionElem.GetAttribute("name"));
baseSection.SuspendLayout(); BaseSection baseSection = (BaseSection)model.SectionCollection.Find(sectionElem.GetAttribute("name"));
if (baseSection != null) {
XmlHelper.SetSectionValues (xmlFormReader,sectionElem,baseSection); XmlNodeList ctrlList = base.MakeSection(sectionElem,baseSection);
XmlNodeList ctrlList = sectionElem.SelectNodes ("controls/control"); SetReportItems(baseSection,null,ctrlList);
if (ctrlList.Count > 0) {
foreach (XmlNode ctrlNode in ctrlList) { }else {
if (ctrlNode is XmlElement) { throw new System.Xml.XmlException ("Report : SetSection Wrong Node in Report");
XmlElement ctrlElem = (XmlElement)ctrlNode; }
BaseReportItem rpt = null; }
try { }
//Read the <BaseClassName> Element
rpt = (BaseReportItem)baseItemFactory.Create(ctrlElem.GetAttribute("basetype"));
if (rpt != null) { void SetReportItems(BaseSection baseSection,
// rpt.SuspendLayout(); IContainerItem parentContainer,XmlNodeList ctrlList) {
rpt.Parent = baseSection;
baseSection.Items.Add (rpt); BaseReportItem baseReportItem;
XmlHelper.SetReportItemValues (xmlFormReader,ctrlElem,rpt);
rpt.Visible = true; foreach (XmlNode ctrlNode in ctrlList) {
rpt.ResumeLayout(); XmlElement ctrlElem = ctrlNode as XmlElement;
} else { if (ctrlElem != null) {
String str = String.Format("< {0}>",ctrlElem.GetAttribute("basetype")); IItemRenderer itemRenderer = null;
throw new UnkownItemException(str); try {
} itemRenderer = baseItemFactory.Create(ctrlElem.GetAttribute("basetype"));
} catch (Exception ) { baseReportItem = base.MakeItem (ctrlElem,parentContainer,baseSection,itemRenderer);
throw;
} IContainerItem iContainer = baseReportItem as IContainerItem;
}
if (iContainer != null) {
XmlNodeList newList = ctrlNode.SelectNodes (base.NodesQuery);
if (newList.Count > 0) {
SetReportItems (baseSection,iContainer,newList);
} }
} }
}else {
throw new MissingSectionException(); }
catch (Exception ) {
throw new UnkownItemException();
} }
}else {
throw new System.Xml.XmlException ("Report : SetSection Wrong Node in Report");
} }
} }
} }

Loading…
Cancel
Save