www.pudn.com > Cnewprint.rar > frmPrint.cs


using System; 
using System.Drawing; 
using System.Drawing.Printing; 
using System.Collections; 
using System.ComponentModel; 
using System.Windows.Forms; 
using System.Data; 
 
namespace GoldPrinter 
{ 
	///  
	/// Form1 的摘要说明。 
	///  
	public class frmPrint : System.Windows.Forms.Form 
	{ 
		private System.Drawing.Printing.PageSettings mpageSettings; 
 
		private System.Windows.Forms.MainMenu mainMenu1; 
		private System.Windows.Forms.MenuItem menuFile; 
		private System.Windows.Forms.MenuItem menuFilePageSetup; 
		private System.Windows.Forms.MenuItem menuFilePrintPreview; 
		private System.Windows.Forms.MenuItem menuFilePrint; 
 
		private System.Windows.Forms.DataGrid dataGrid1; 
		private System.Windows.Forms.Button btnPrintEase; 
		private System.Windows.Forms.Button btnPrintAll; 
 
		///  
		/// 必需的设计器变量。 
		///  
		private System.ComponentModel.Container components = null; 
 
		public frmPrint() 
		{ 
			// 
			// Windows 窗体设计器支持所必需的 
			// 
			InitializeComponent(); 
 
			// 
			// TODO: 在 InitializeComponent 调用后添加任何构造函数代码 
			// 
		} 
 
		///  
		/// 清理所有正在使用的资源。 
		///  
		protected override void Dispose( bool disposing ) 
		{ 
			if( disposing ) 
			{ 
				if (components != null)  
				{ 
					components.Dispose(); 
				} 
			} 
			base.Dispose( disposing ); 
		} 
 
		#region Windows 窗体设计器生成的代码 
		///  
		/// 设计器支持所需的方法 - 不要使用代码编辑器修改 
		/// 此方法的内容。 
		///  
		private void InitializeComponent() 
		{ 
			this.mainMenu1 = new System.Windows.Forms.MainMenu(); 
			this.menuFile = new System.Windows.Forms.MenuItem(); 
			this.menuFilePageSetup = new System.Windows.Forms.MenuItem(); 
			this.menuFilePrintPreview = new System.Windows.Forms.MenuItem(); 
			this.menuFilePrint = new System.Windows.Forms.MenuItem(); 
			this.dataGrid1 = new System.Windows.Forms.DataGrid(); 
			this.btnPrintEase = new System.Windows.Forms.Button(); 
			this.btnPrintAll = new System.Windows.Forms.Button(); 
			((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).BeginInit(); 
			this.SuspendLayout(); 
			//  
			// mainMenu1 
			//  
			this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { 
																					  this.menuFile}); 
			//  
			// menuFile 
			//  
			this.menuFile.Index = 0; 
			this.menuFile.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { 
																					 this.menuFilePageSetup, 
																					 this.menuFilePrintPreview, 
																					 this.menuFilePrint}); 
			this.menuFile.Text = "&File"; 
			//  
			// menuFilePageSetup 
			//  
			this.menuFilePageSetup.Index = 0; 
			this.menuFilePageSetup.Text = "Page Set&up"; 
			this.menuFilePageSetup.Click += new System.EventHandler(this.menuFilePageSetup_Click); 
			//  
			// menuFilePrintPreview 
			//  
			this.menuFilePrintPreview.Index = 1; 
			this.menuFilePrintPreview.Text = "Print Pre&view"; 
			this.menuFilePrintPreview.Click += new System.EventHandler(this.menuFilePrintPreview_Click); 
			//  
			// menuFilePrint 
			//  
			this.menuFilePrint.Index = 2; 
			this.menuFilePrint.Text = "&Print"; 
			this.menuFilePrint.Click += new System.EventHandler(this.menuFilePrint_Click); 
			//  
			// dataGrid1 
			//  
			this.dataGrid1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)  
				| System.Windows.Forms.AnchorStyles.Left)  
				| System.Windows.Forms.AnchorStyles.Right))); 
			this.dataGrid1.DataMember = ""; 
			this.dataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText; 
			this.dataGrid1.Location = new System.Drawing.Point(2, 32); 
			this.dataGrid1.Name = "dataGrid1"; 
			this.dataGrid1.Size = new System.Drawing.Size(518, 336); 
			this.dataGrid1.TabIndex = 0; 
			//  
			// btnPrintEase 
			//  
			this.btnPrintEase.Location = new System.Drawing.Point(3, 7); 
			this.btnPrintEase.Name = "btnPrintEase"; 
			this.btnPrintEase.Size = new System.Drawing.Size(200, 23); 
			this.btnPrintEase.TabIndex = 1; 
			this.btnPrintEase.Text = "唉,打个网格试试吧?"; 
			this.btnPrintEase.Click += new System.EventHandler(this.btnPrintEase_Click); 
			//  
			// btnPrintAll 
			//  
			this.btnPrintAll.Location = new System.Drawing.Point(232, 8); 
			this.btnPrintAll.Name = "btnPrintAll"; 
			this.btnPrintAll.Size = new System.Drawing.Size(200, 23); 
			this.btnPrintAll.TabIndex = 2; 
			this.btnPrintAll.Text = "哈哈,老士,瞧我的!"; 
			this.btnPrintAll.Click += new System.EventHandler(this.btnPrintAll_Click); 
			//  
			// frmPrint 
			//  
			this.AutoScaleBaseSize = new System.Drawing.Size(6, 14); 
			this.BackColor = System.Drawing.SystemColors.Control; 
			this.ClientSize = new System.Drawing.Size(520, 374); 
			this.Controls.Add(this.btnPrintAll); 
			this.Controls.Add(this.btnPrintEase); 
			this.Controls.Add(this.dataGrid1); 
			this.Menu = this.mainMenu1; 
			this.Name = "frmPrint"; 
			this.Text = "SimplePrintingExample"; 
			this.Load += new System.EventHandler(this.frmPrint_Load); 
			((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).EndInit(); 
			this.ResumeLayout(false); 
 
		} 
		#endregion 
 
		///  
		/// 应用程序的主入口点。 
		///  
		[STAThread] 
		static void Main()  
		{ 
			Application.Run(new frmPrint()); 
		} 
 
		private void frmPrint_Load(object sender, System.EventArgs e) 
		{ 
			this.dataGrid1.DataSource = this.GetDataSource(); 
		} 
 
		private void btnPrintEase_Click(object sender, System.EventArgs e) 
		{ 
			MisPrinter webmis = new MisPrinter();							//打印组件 
			webmis.Title = "WebMIS.Net快速开发工具\nWWW.AlinkSoft.COM";		//网格标题 
			webmis.DataSource = this.dataGrid1;								//DataGrid作为数据源 
			webmis.Preview();												//打印预览 
			webmis = null;		 
		} 
 
		private void btnPrintAll_Click(object sender, System.EventArgs e) 
		{ 
			menuFilePrintPreview_Click(null,null); 
		} 
 
 
		private void menuFilePageSetup_Click(object sender, System.EventArgs e) 
		{ 
 
		} 
		private void menuFilePrint_Click(object sender, System.EventArgs e) 
		{ 
			this.Print(true); 
		} 
 
		private void menuFilePrintPreview_Click(object sender, System.EventArgs e) 
		{ 
			this.Print(false); 
		} 
 
 
		private void Print(bool print) 
		{ 
			#region 打印比较全的例子 
			MisPrinter webmis = new MisPrinter();	//打印组件 
 
			//webmis.BackColor = Color.FloralWhite;	//背景色 
			//webmis.IsPrinterMargins = true;		//试试看,去掉注释后就明白了 
			//webmis.RowsPerPage = 20;				//可以指定每页打印的行数,默认自适应 
			//webmis.GridBorder = GoldPrinter.GridBorderFlag.SingleBold; 
 
			Title title = new Title(); 
			title.Text = "WebMIS.Net快速开发工具\nWWW.AlinkSoft.COM"; 
			webmis.Title = title;									//等效于webmis.Title = "WebMIS.Net快速开发工具\nWWW.AlinkSoft.COM"; 
																 
			webmis.Caption = "  ——之打印源码,欢迎下载";		//但对象方式(见webmis.Title)更具特性,因为还可以定义字体等 
 
																//可以是以'|'分隔的字符串或一维数组或具有更多特性的Top/Bottom对象 
			webmis.Top = "作者:周方勇|2004-08-19|版本:V1.1";	//等价于 webmis.Top = new string[]{"作者:周方勇","2004-08-19","版本:V1.1"}; 
																//webmis.Top = new Top();  此种表示见webmis.Bottom 
			 
			 
			Header header = new Header(3,4);					//行列数基本不受限制,但超过一页失去意义,因为以Body为主,以其它为辅 
			header.IsDrawAllPage = true;						//可以指定每页是否重复打印 
			header.SetText(0,0,"Header00");						//实际上可以设置header.DataSource 
			header.SetText(0,1,"Header01");						//DataSource可以是字符串、一维数组、二维数组、DataTable、WinDataGrid、WebDataGrid、 
			header.SetText(0,2,"Header02");						//MSHFlexGrid、HtmlTable等等二维形式 
			header.SetText(0,3,"Header03");						// 
 
			header.SetText(1,0,"Header10");						//同仁们还可以根据实际应用对GridBase的DataSource进行扩展 
			header.SetText(1,1,"Header11");						 
			header.SetText(1,2,"Header12");						 
			header.SetText(1,3,"Header13"); 
 
			header.SetText(2,0,"Header20"); 
			header.SetText(2,1,"Header21"); 
			header.SetText(2,2,"Header22"); 
			header.SetText(2,3,"Header23"); 
			webmis.Header = header;									 
 
			MultiHeader multiHeader = new MultiHeader(2,6); 
 
			multiHeader.SetMergeTextOnColSel(0,0,1,"    项目\nNo.     .");	 
			multiHeader.IsDrawDiagonalLine = true;								 
			multiHeader.DiagonalLineRows = 2;	//试试其它的数如3  又如1.5F 
 
																				 
			multiHeader.SetMergeTextOnColSel(1,0,1,"产品\n名称");	//等价于	//multiHeader.SetText(1,1,"产品\n名称"); 
																				//multiHeader.SetText(0,1,"产品\n名称");			 
			multiHeader.SetText(0,2,"规格"); 
																				//multiHeader.SetText(0,3,"订量信息"); 
			multiHeader.SetMergeTextOnRowSel(0,3,5,"订量信息");		//等价于	//multiHeader.SetText(0,4,"订量信息"); 
																				//multiHeader.SetText(0,5,"订量信息");	 
 
			multiHeader.SetText(1,2,"规格"); 
			multiHeader.SetText(1,3,"单价"); 
			multiHeader.SetText(1,4,"数量"); 
			multiHeader.SetText(1,5,"金额"); 
			webmis.MultiHeader = multiHeader; 
 
			Body body = new Body(); 
			body.ColsAlignString = "LLCRRR";						//由左中右第一个字母组成,对应于每列的对对齐方式 
			 
			//只要是二维数组,都可以,因此DataGrid、MSHFlexGrid、DBGrid、DataTable、HtmlTable等等都OK 
			//这里用DataGrid作一个例子。不过,你自己可以写一个函数,把没有支持的二维控件转换成数组就OK了 
			//body.DataSource = this.GetDataSource();					 
			//body.DataSource = (DataTable)(this.dataGrid1.DataSource);	//或者 
			//body.DataSource = this.dataGrid1.DataSource;				//或者 
			body.DataSource = this.dataGrid1;							//或者 
 
			 
			int mcols = 6; 
			#region 这是数组的例子,把body.DataSource = (DataTable)(this.dataGrid1.DataSource);注释掉,去掉下面的注释看看 
			/* 
			int mrows = 50;//111; 
			string[,] arrstrGrid = new string[mrows,mcols]; 
			for(int i=0 ;i< mrows ; i++) 
			{ 
				for(int j=0 ;j< mcols-1 ; j++) 
				{ 
					arrstrGrid[i,j] = (i + 1).ToString() + "行" + (j + 1).ToString() + "列"; 
				}			 
				arrstrGrid[i,0] = (i + 1).ToString(); 
				arrstrGrid[i,mcols-1] = (i + 1).ToString(); 
			} 
 
			body.DataSource = arrstrGrid;		//body.GridText = arrstrGrid; 
			*/ 
			#endregion 
 
			webmis.Body = body; 
			//webmis.DataSource = this.dataGrid1;			//如果直接打印网格,可以不用定义Body,用这一句就够了 
			webmis.IsSubTotalPerPage = true;				//这是打印本页小计 
			webmis.SubTotalCol = (mcols-2).ToString() + ";" + (mcols-1).ToString();		//用分号分隔的要求小计的列				 
			 
			Footer footer = new Footer(2,5); 
			footer.SetText(0,0,"Footer00"); 
			footer.SetText(0,1,"Footer01"); 
			footer.SetText(0,2,"Footer02"); 
			footer.SetText(0,3,"Footer03"); 
			footer.SetText(0,4,"Footer04"); 
 
			footer.SetText(1,0,"Footer10"); 
			footer.SetText(1,1,"Footer11"); 
			footer.SetText(1,2,"Footer12"); 
			footer.SetText(1,3,"Footer13"); 
			footer.SetText(1,4,"Footer14"); 
			footer.IsDrawAllPage = true; 
			webmis.Footer = footer; 
			 
			GoldPrinter.Bottom bottom = new Bottom();		//Top/Bottom的另一种方式 
			bottom.Text =  "打印程序开源版||打印日期:" + System.DateTime.Now.ToLongDateString(); 
			webmis.Bottom = bottom; 
 
 
			//将注释去掉试试看 
			Sewing sewing = new Sewing(20,SewingDirectionFlag.Left); 
			webmis.Sewing = sewing; 
			webmis.IsSewingLine = true;			//打印装订线		 
 
 
			webmis.IsSubTotalPerPage = true;	//每页加小计 
		 
 
			if (print) 
			{ 
				webmis.Print(); 
			} 
			else 
			{ 
				webmis.Preview(); 
			} 
 
			webmis.Dispose(); 
			webmis = null; 
			#endregion  
		} 
 
 
		private DataTable GetDataSource() 
		{ 
			DataTable dt=new DataTable(); 
 
			int rows = 50; 
			int cols = 6; 
 
			//增加行 
			for (int intRowIndex=0;intRowIndex