loadreportvisitor.cs

来自「SharpDevelop2.0.0 c#开发免费工具」· CS 代码 · 共 132 行

CS
132
字号
//------------------------------------------------------------------------------
// <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>
//------------------------------------------------------------------------------
/// <summary>
/// Loads a ReportFile and set it's Values in the ReportDesigner
/// </summary>
/// <remarks>
/// 	created by - Forstmeier Peter
/// 	created on - 02.12.2004 22:44:39
/// </remarks>

using System;
using System.Xml;
using System.ComponentModel;
using System.Globalization;

using SharpReportCore;

using SharpReport.Visitors;
using SharpReport.Designer;
using SharpReport.ReportItems;


namespace SharpReport.Visitors {

	public class LoadReportVisitor : SharpReportCore.AbstractModelVisitor {	
		SharpReport.Designer.BaseDesignerControl baseDesigner;
		IDesignableFactory designableFactory ;
		
		public LoadReportVisitor(string fileName):base(fileName) {
			designableFactory = new IDesignableFactory();
		}
		
		/// <summary>
		/// Loads ReportDefinition from File and set the values in the SharpReportDesigner
		/// </summary>
		/// <param name='designer'>SharpReportDesigner</param>
		public override void Visit(System.Windows.Forms.Control designer){
			if (designer == null) {
				throw new ArgumentNullException("designer");
			}
			this.baseDesigner = designer as SharpReport.Designer.BaseDesignerControl;
			
			if (this.baseDesigner == null) {
				throw new ArgumentException("designer");
			}
			
			XmlDocument xmlDoc;
			try {
				xmlDoc = XmlHelper.OpenSharpReport (base.FileName);
				SetDesigner (xmlDoc);
				AdjustSectionsWidth();
			} catch (Exception ) {
				throw ;
			}
			
		}
		
		private void AdjustSectionsWidth() {
			foreach (ReportSection section in baseDesigner.SectionsCollection) {
				section.VisualControl.Width = baseDesigner.ReportModel.ReportSettings.PageSettings.Bounds.Width;
				if (section.SectionMargin == 0) {
					section.SectionMargin = baseDesigner.ReportModel.ReportSettings.PageSettings.Bounds.Left;
				}
			}
		}
		
		
		private void  SetDesigner (XmlDocument doc){
			this.baseDesigner.ReportModel.ReportSettings.SetSettings ((XmlElement)doc.DocumentElement.FirstChild);
			SetSections (doc);
		}
		
	
		
		private void SetSections (XmlDocument doc) {
			
			XmlNodeList sectionNodes = doc.DocumentElement.ChildNodes;
			//Start with node(1)

			for (int i = 1;i < sectionNodes.Count ; i++ ) {
				XmlNode node = sectionNodes[i];
				XmlElement sectionElem = node as XmlElement;
				if (sectionElem != null) {
					BaseSection baseSection = (BaseSection)baseDesigner.ReportModel.SectionCollection.Find(sectionElem.GetAttribute("name"));

					XmlNodeList ctrlList = base.MakeSection(sectionElem,baseSection);
					SetReportItems(baseSection,null,ctrlList);

				} else {
					throw new MissingSectionException();
				}
			}
		}
		
		
		void SetReportItems(BaseSection baseSection,
		                    IContainerItem parentContainer,XmlNodeList ctrlList) {
			
			BaseReportItem baseReportItem;
			foreach (XmlNode ctrlNode in ctrlList) {
				XmlElement ctrlElem = ctrlNode as XmlElement;
				if (ctrlElem != null) {
					IItemRenderer itemRenderer = null;
					try {
						itemRenderer = designableFactory.Create(ctrlElem.GetAttribute("type"));
						
						baseReportItem = base.MakeItem(ctrlElem,parentContainer,baseSection,itemRenderer);
						IContainerItem iContainer = baseReportItem as IContainerItem;
						
						if (iContainer != null) {
							XmlNodeList newList = ctrlNode.SelectNodes (base.NodesQuery);
							if (newList.Count > 0) {
								SetReportItems (baseSection,iContainer,newList);
							}
						}
					}
					catch (Exception ) {
						throw new UnkownItemException();
					}
				}
			}
		}
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?