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

📄 renderdatareport.cs

📁 c#源代码
💻 CS
字号:

//
// SharpDevelop ReportEditor
//
// Copyright (C) 2005 Peter Forstmeier
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
//
// Peter Forstmeier (Peter.Forstmeier@t-online.de)

using System;
using System.Data;
using System.Drawing;
using System.Drawing.Printing;
	
using SharpReportCore;

	/// <summary>
	/// Renderer for DataReports
	/// </summary>
	/// <remarks>
	/// 	created by - Forstmeier Peter
	/// 	created on - 13.12.2004 11:07:59
	/// </remarks>
	/// 

namespace SharpReportCore {
	public class RenderDataReport : SharpReportCore.AbstractRenderer {
		
		private DataManager dataManager = null;
		private PointF currentPoint = new PointF (0,0);
		
		public RenderDataReport(ReportModel model):base (model){
		}

		public RenderDataReport(ReportModel model,DataManager dataManager):base (model){
			this.dataManager = dataManager;
		}
		
	
		
		#region overrides
		

		protected override void ReportQueryPage(object sender, QueryPageSettingsEventArgs e) {
			base.ReportQueryPage (sender,e);
		}
			
		protected override void ReportBegin(object sender, ReportPageEventArgs e) {
			base.ReportBegin (sender,e);
			//allways reset the dataManager before printing
			if (this.dataManager != null) {
				this.dataManager.Reset();
			}
		}
		
		protected override void BeginPrintPage(object sender, ReportPageEventArgs e) {

			base.BeginPrintPage (sender,e);
			//Draw ReportHeader
			currentPoint = base.DrawReportHeader (e);		
			if (base.CurrentSection.PageBreakAfter) {
				base.PageBreak(e,base.CurrentSection);
				base.CurrentSection.PageBreakAfter = false;
				return;
			}
			
			//Draw Pageheader
			currentPoint = base.DrawPageHeader (currentPoint,e);
			base.DetailStart = new Point ((int)currentPoint.X,(int)currentPoint.Y);
		}
		
		protected override void PrintBodyStart(object sender, ReportPageEventArgs e) {
			Rectangle sectionRect;
			Rectangle detailRect;
			
			base.PrintBodyStart (sender,e);
			base.SectionInUse = Convert.ToInt16(GlobalEnums.enmSection.ReportDetail);
			
			BaseSection section = base.CurrentSection;
			
			section.SectionOffset = (int)this.currentPoint.Y + base.Gap;
			
			detailRect = base.DetailAreaRectangle (e);
			
			//this is only for the first record, zhe other details will be calculated
			sectionRect = new Rectangle (e.PrintPageEventArgs.MarginBounds.Left,
			                             section.SectionOffset,
			                             e.PrintPageEventArgs.MarginBounds.Width,
			                             section.Size.Height);
			DebugRectangle (e,detailRect);
			
			float offset = 0F;
			// no loop if there is no data
			if (! dataManager.HasMoreData ) {
				e.PrintPageEventArgs.HasMorePages = false;
				return;
			}
			
			
			// here starts the page
			bool goon = true;
			do {
				try {
					if (dataManager.HasMoreData) {
						
						dataManager.FetchData (base.CurrentSection.Items);
						offset = base.RenderSection (section,e);
						
						section.SectionOffset = section.SectionOffset + section.Size.Height  + 2 * base.Gap;
						base.FitSectionToItems (base.CurrentSection,e);
						
						sectionRect = new Rectangle (e.PrintPageEventArgs.MarginBounds.Left,
						                             section.SectionOffset,
						                             e.PrintPageEventArgs.MarginBounds.Width,
						                             section.Size.Height);
						
						dataManager.Skip();
					} else {
						e.PrintPageEventArgs.HasMorePages = false;
						goon = false;
					}
					
				} catch (Exception) {
					e.PrintPageEventArgs.HasMorePages = false;
					goon = false;
				}
				
				
			}
			while (detailRect.Contains(sectionRect)&& goon);
			
			
			// is there is anymore data

			if (dataManager.HasMoreData ) {
				base.PageBreak(e,section);
				return;
			} else {
				e.PrintPageEventArgs.HasMorePages = false;
			}
			
			//Did we have a pagebreak 
			if (base.CurrentSection.PageBreakAfter) {
				base.PageBreak(e,section);
				base.CurrentSection.PageBreakAfter = false;
				return;
			}
		}
		
		
		
		protected override void PrintBodyEnd(object sender, ReportPageEventArgs e) {
			base.PrintBodyEnd (sender,e);
		}
		
		
		protected override void PrintPageEnd(object sender, ReportPageEventArgs e) {
			base.SectionInUse = Convert.ToInt16(GlobalEnums.enmSection.ReportPageFooter);
			base.PrintPageEnd (sender,e);
			base.DetailEnds = new Point (0,base.CurrentSection.SectionOffset);
		}
	
		public override string ToString() {
			base.ToString();
			return "RenderDataReport";
		}
		#endregion
		public DataManager DatManager {
//		public DataContainer DataContainer {
			get {
				return dataManager;
			}
			set {
				dataManager = value;
			}
		}
		
	}
}

⌨️ 快捷键说明

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