⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 daprintdocument.cs

📁 是用c#实现的一个有关于报表设计的程序代码
💻 CS
📖 第 1 页 / 共 3 页
字号:
		/// Gets/Sets the 
		/// <see cref="daReport.Paper.Type">daReport.Paper.Type</see>
		/// for the current DaPrintDocument
		/// </summary>
		public Paper.Type PaperType
		{
			get{ return paperType;}
			set
			{
				paperType = value;
				int[] size  = Paper.GetPaperSize(paperType);
				this.DefaultPageSettings.PaperSize = new PaperSize("",size[0],size[1]);
				if(OnPageSizeChanged!=null)
					OnPageSizeChanged(this);
			}

		}


		/// <summary>
		/// Uses the passed in string to look up paramter values
		/// </summary>
		/// <param name="input">paramater value to look up</param>
		/// <returns>string value of parameter</returns>
		[Browsable(false)]
		public string ResolveParameterValues(string input)
		{
			string buffer = "";
			int pos = -1;
			int oldPos = 0;

			while( (pos=input.IndexOf("$P",oldPos)) != -1 )
			{
				buffer += input.Substring(oldPos,pos-oldPos);
				if ( input.Substring(pos+2,1).Equals("{") && input.IndexOf("}",pos+2) != -1 )
				{
					string parameterName = input.Substring(pos+3,input.IndexOf("}",pos+2)-pos-3).Trim();

					if ( systemValues.ContainsKey(parameterName))
					{
						buffer += systemValues[parameterName].ToString();
					}
					else if ( declaredParameters.Contains(parameterName) && parameterValues.ContainsKey(parameterName))
					{
						buffer += parameterValues[parameterName].ToString();
					}
					oldPos = input.IndexOf("}",pos+2) + 1;
				}
				else
				{				
					oldPos = pos+2;
				}
			}

			buffer += input.Substring(oldPos);

			return buffer;
		}


		/// <summary>
		/// A string collection of parameters for the current DaPrintDocument object.
		/// </summary>
		/// <remarks>You will use the
		/// <see cref="daReport.DaPrintDocument.SetParameters">daReport.DaPrintDocument.SetParameters</see>
		/// function to set the values of parameters.</remarks>
		public Parameters Parameters
		{
			get { return declaredParameters; }
			set { declaredParameters = value; }

		}	


		/// <summary>
		/// 
		/// </summary>
		/// <param name="FileName">Location of the file to be saved to</param>
		/// <returns>returns true if save was successful</returns>
		public bool SaveXMLDocument(string FileName)
		{
			try
			{
				string CurrentLayout = "Portrait";
				if (this.Layout == DaPrintDocument.LayoutType.Landscape )
					CurrentLayout = "Landscape";

				//XmlTextWriter XmlWriter = new XmlTextWriter(Application.StartupPath + "\\test.xml", System.Text.Encoding.UTF8);
				XmlTextWriter XmlWriter = new XmlTextWriter(FileName, System.Text.Encoding.UTF8);
				XmlWriter.Formatting = Formatting.Indented;

				XmlWriter.WriteStartElement("daReport");
				XmlWriter.WriteAttributeString("papersize", this.paperType.ToString());
				XmlWriter.WriteAttributeString("layout", CurrentLayout);
				XmlWriter.WriteStartElement("margins");
				XmlWriter.WriteAttributeString("left", this.Margins.Left.ToString());
				XmlWriter.WriteAttributeString("top", this.Margins.Top.ToString());
				XmlWriter.WriteAttributeString("right", this.Margins.Right.ToString());
				XmlWriter.WriteAttributeString("bottom", this.Margins.Bottom.ToString());
				XmlWriter.WriteEndElement(); //end of margins element

				if (this.Parameters.Count>0)
				{
					XmlWriter.WriteStartElement("parameters");

					for (int i=0;i<this.Parameters.Count;i++)
					{
						XmlWriter.WriteStartElement("parameter");
						XmlWriter.WriteAttributeString("name", this.Parameters[i].Name);
						XmlWriter.WriteEndElement();
					}

					XmlWriter.WriteEndElement(); //end of parameters element
				}

				if (this.staticObjects.Length>0 || this.dynamicObjects.Length>0)
				{
					XmlWriter.WriteStartElement("content");

					if (this.staticObjects.Length>0)
					{
						XmlWriter.WriteStartElement("staticContent");

						for (int i=0;i<this.staticObjects.Length;i++)
						{
							this.staticObjects[i].AddXMLToWriter(ref XmlWriter);
						}

						XmlWriter.WriteEndElement(); //end of staticContent element
					}

					if (this.dynamicObjects.Length>0)
					{
						XmlWriter.WriteStartElement("dynamicContent");

						for (int i=0;i<this.dynamicObjects.Length;i++)
						{
							this.dynamicObjects[i].AddXMLToWriter(ref XmlWriter);
						}

						XmlWriter.WriteEndElement(); //end of dynamicContent element
					}

					XmlWriter.WriteEndElement(); //end of content element
				}

				XmlWriter.WriteEndElement(); //end of daReport element

				XmlWriter.Close();

				return true;
			}
			catch (Exception ex)
			{
				MessageBox.Show(ex.Message);
				return false;
			}
		}

		
		#endregion

		#region Private Event Handlers

		private void DaPrintDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
		{
			if (isXmlOK)
			{
				systemValues["pageNumber"] = (int)systemValues["pageNumber"]+1 ;
				Graphics g = e.Graphics;

				if ((int)systemValues["totalPages"] == 0)
					systemValues["totalPages"] = calculateNumberOfPages(g) ;

				bool morePages = updateDynamicContent(g);

				for (int i =0;i<staticObjects.Length;i++)
				{
					if (staticObjects[i] != null)
					{
						if (Int32.Parse(systemValues["pageNumber"].ToString()) > 1)
						{
							if (! morePages)
							{
								if (staticObjects[i].ObjectRepeatability != ICustomPaint.ObjectRepeatabilityTypes.OnlyFirstPage)
									staticObjects[i].Paint(g);
							}
							else
							{
								if (staticObjects[i].ObjectRepeatability == ICustomPaint.ObjectRepeatabilityTypes.RepeatOnAllPages)
									staticObjects[i].Paint(g);
							}
						}
						else
						{
							if (staticObjects[i].ObjectRepeatability != ICustomPaint.ObjectRepeatabilityTypes.OnlyLastPage)
								staticObjects[i].Paint(g);
						}
					}
				}

				for (int i =0;i<dynamicObjects.Length;i++)
				{
					if (dynamicObjects[i] != null)
					{
						if (Int32.Parse(systemValues["pageNumber"].ToString()) > 1)
						{
							if (! morePages)
							{
								if (dynamicObjects[i].ObjectRepeatability != ICustomPaint.ObjectRepeatabilityTypes.OnlyFirstPage)
									dynamicObjects[i].Paint(g);
							}
							else
							{
								if (dynamicObjects[i].ObjectRepeatability == ICustomPaint.ObjectRepeatabilityTypes.RepeatOnAllPages)
									dynamicObjects[i].Paint(g);
							}
						}
						else
						{
							if (dynamicObjects[i].ObjectRepeatability != ICustomPaint.ObjectRepeatabilityTypes.OnlyLastPage)
								dynamicObjects[i].Paint(g);
						}
					}
				}

				e.HasMorePages = morePages;
			}
			else
			{
				string theMessage = "Xml file structure is incorrect !\r\n\r\n";

				e.Graphics.DrawString(theMessage+theErrorMessage,new Font("Tahoma",10),new SolidBrush(Color.Black),e.MarginBounds);
				e.HasMorePages = false;
			}
		}


		private void DaPrintDocument_BeginPrint(object sender, System.Drawing.Printing.PrintEventArgs e)
		{
			if (!designMode)
				PrepareStaticObjects();
			
			IDictionaryEnumerator en = mDataTables.GetEnumerator();
			while (en.MoveNext())
			{
				rowsPrintedSoFar[en.Key] = 0;
			}
			
			// reset system variables on begin print
			systemValues["pageNumber"] = 0 ;
			systemValues["totalPages"] = 0 ;
		}


		#endregion

		#region Private Functions

		private void getChartNames()
		{
			if (xmlStaticElements==null) return;

			for (int i=0;i<xmlStaticElements.Count;i++)
			{
				if (xmlStaticElements[i].Name == "chartBox")
				{
					if (xmlStaticElements[i].Attributes["name"] != null)
					{
						theCharts.Add(xmlStaticElements[i].Attributes["name"].Value,i);
					}
				}
			}
		}


		private void initSystemParameters()
		{
			systemValues = new Hashtable();
			systemValues.Add("pageNumber",0);
			systemValues.Add("totalPages",0);
			systemValues.Add("systemDate",DateTime.Now.ToString("dd/MM/yyyy"));
			systemValues.Add("systemTime",DateTime.Now.ToString("HH:mm:ss"));
		}


		private void PrepareStaticObjects()
		{
			for (int i=0;i<staticObjects.Length;i++)
			{
				if (staticObjects[i] is TextField)
				{
					TextField txtField = staticObjects[i] as TextField;
					txtField.Text = ResolveParameterValues(txtField.Text);
				}
			}
		}		


		private void resolveContents(XmlNode theNode)
		{
			XmlNodeList temp = theNode.ChildNodes;
			for (int i=0;i<temp.Count;i++)
			{
				switch (temp[i].Name)
				{
					case "dynamicContent" :
						xmlDynamicElements = temp[i].ChildNodes;
						break;

					case "staticContent" :
						xmlStaticElements = temp[i].ChildNodes;
						break;
				}
			}
		}
		
		
		private void resolveLayout(XmlNode theNode)
		{
			
			if (theNode.Attributes["size"] != null)
			{
				string theSize = theNode.Attributes["size"].Value;
			}			
			
			if (theNode.Attributes["layout"] != null)
			{
				string theOrientation = theNode.Attributes["layout"].Value;

				if ( theOrientation == "Landscape" )
					this.DefaultPageSettings.Landscape = true;
				else
					this.DefaultPageSettings.Landscape = false;
			}
		}
		

		private void resolveMargins(XmlNode theNode)
		{
			try
			{
				this.Margins.Top = Convert.ToInt32 (theNode.Attributes["top"].Value);
				this.Margins.Left = Convert.ToInt32 (theNode.Attributes["left"].Value);
				this.Margins.Bottom = Convert.ToInt32 (theNode.Attributes["bottom"].Value);
				this.Margins.Right = Convert.ToInt32 (theNode.Attributes["right"].Value);
			}
			catch(Exception){}
		}

		
		private void resolvePaperSize(XmlNode theNode)
		{			
			if (theNode.Attributes["papersize"] != null)
			{
				this.PaperType = Paper.GetType(theNode.Attributes["papersize"].Value);
			}					
		}


		private void resolveParameterDeclaration(XmlNode theNode)
		{
			XmlNodeList childNodes = theNode.ChildNodes;

			for (int i=0;i<childNodes.Count;i++)
			{
				try
				{
					Parameter Param = new Parameter(childNodes[i].Attributes["name"].Value);
					if (!declaredParameters.Contains(Param))
					{
						declaredParameters.Add(Param);
					}
				}
				catch(Exception){}
			}
		}


		private void setXML()
		{
			try
			{
				XmlNode root = xmlDoc.FirstChild;
				XmlNodeList temp = root.ChildNodes;
				
				resolvePaperSize(root);
				resolveLayout(root);

				for (int i=0;i<temp.Count;i++)
				{
					switch (temp[i].Name)
					{
						case "margins" :
							resolveMargins(temp[i]);
							break;

						case "parameters" :
							resolveParameterDeclaration(temp[i]);
							break;

						case "content" :
							resolveContents(temp[i]);
							break;
					}
				}

				InitStaticObjects();
				InitDynamicObjects();

				this.OnMarginsChanged += new MarginsChangedHandler(RepeatAlignments);
				this.OnPageLayoutChanged += new PageLayoutChangedHandler(RepeatAlignments);
			}
			catch(FileNotFoundException)
			{
				//MessageBox.Show("No such file "+filename);
				
			}
			catch(XmlException e)
			{
				isXmlOK = false;
				Exception tmp = e;
				theErrorMessage = "";
				while (tmp != null)
				{
					theErrorMessage += tmp.Message + "\r\n";
					tmp = tmp.InnerException;
				}
			}

		}

		
		#endregion

		#region Private Properties

		private int adjustHorizontalFill(string theFill)
		{
			int width = Math.Max(0,DefaultPageSettings.Bounds.Right - DefaultPageSettings.Bounds.Left - DefaultPageSettings.Margins.Left - DefaultPageSettings.Margins.Right);
			try
			{
				int pctFill = Convert.ToInt32(theFill);
				if (pctFill>100)
				{
					pctFill = 100;
				}
				else if (pctFill<0)
				{

⌨️ 快捷键说明

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