frmCompletePrint.cs
资源名称:GOLDPRINT.rar [点击查看]
上传用户:jx_fiona
上传日期:2014-03-08
资源大小:1387k
文件大小:12k
源码类别:
打印编程
开发平台:
Others
- using System;
- using System.Drawing;
- using System.Collections;
- using System.ComponentModel;
- using System.Windows.Forms;
- using System.Data;
- using GoldPrinter;
- namespace MisGoldPrinterTest
- {
- /// <summary>
- /// 打印示例--对象定制、变换无穷(装订线、多层表头、每页小计...)
- /// 注意:你只要牢记打印对象(除标题)的核心是二维数组,那么就轻松了
- /// </summary>
- public class frmCompletePrint : System.Windows.Forms.Form
- {
- #region Windows 窗体设计器生成的代码
- 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;
- /// <summary>
- /// 必需的设计器变量。
- /// </summary>
- private System.ComponentModel.Container components = null;
- public frmCompletePrint()
- {
- //
- // Windows 窗体设计器支持所必需的
- //
- InitializeComponent();
- //
- // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
- //
- }
- /// <summary>
- /// 清理所有正在使用的资源。
- /// </summary>
- protected override void Dispose( bool disposing )
- {
- if( disposing )
- {
- if(components != null)
- {
- components.Dispose();
- }
- }
- base.Dispose( disposing );
- }
- /// <summary>
- /// 设计器支持所需的方法 - 不要使用代码编辑器修改
- /// 此方法的内容。
- /// </summary>
- 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();
- ((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(0, 0);
- this.dataGrid1.Name = "dataGrid1";
- this.dataGrid1.Size = new System.Drawing.Size(704, 408);
- this.dataGrid1.TabIndex = 1;
- //
- // frmCompletePrint
- //
- this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
- this.ClientSize = new System.Drawing.Size(704, 409);
- this.Controls.Add(this.dataGrid1);
- this.Menu = this.mainMenu1;
- this.Name = "frmCompletePrint";
- this.Text = "对象定制、变换无穷 -- MIS金质打印通 使用示例(C#版)";
- this.Load += new System.EventHandler(this.frmAllPrint_Load);
- this.Closed += new System.EventHandler(this.frmAllPrint_Closed);
- ((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).EndInit();
- this.ResumeLayout(false);
- }
- #endregion
- private GoldPrinter.MisGoldPrinter misGoldPrinter = new GoldPrinter.MisGoldPrinter();
- //*****第N步*****:打印或预览 菜单:页面设置、打印机设置、打印预览
- private void menuFilePageSetup_Click(object sender, System.EventArgs e)
- {
- misGoldPrinter.PageSetup();
- }
- private void menuFilePrint_Click(object sender, System.EventArgs e)
- {
- Print(true);
- }
- private void menuFilePrintPreview_Click(object sender, System.EventArgs e)
- {
- Print(false);
- }
- //打印比较全的例子,可以对每一个打印对象设置特性
- //***************注意:你只要牢记打印对象(除标题)的核心是二维数组,那么就轻松了***************
- private void Print(bool print)
- {
- #region 打印比较全的例子,好些网友来信问使用说明,哈哈,就是这个了,程序使用及注释就是最好的说明。
- //打印组件申明并实例化,可以定义为全局的
- //MisGoldPrinter misGoldPrinter = new MisGoldPrinter();
- //misGoldPrinter.BackColor = Color.FloralWhite; //背景色
- //misGoldPrinter.IsPrinterMargins = true; //试试看,去掉注释后就明白了
- //misGoldPrinter.RowsPerPage = 20; //可以指定每页打印的行数,默认自适应
- //misGoldPrinter.GridBorder = GoldPrinter.GridBorderFlag.SingleBold; //边框,有单边框、双边框等形式
- misGoldPrinter.DocumentName = "MIS金质打印通 通打天下报表";
- //主标题
- Title title = new Title();
- title.Text = "WebMIS.Net快速开发工具nWWW.WebMIS.COM.CN";
- misGoldPrinter.Title = title; //等效于misGoldPrinter.Title = "misGoldPrinter.Net快速开发工具nWWW.AlinkSoft.COM";
- //子标题(可选)
- misGoldPrinter.Caption = " ——之GoldPrinter(金质打印通),欢迎下载"; //但对象方式(见misGoldPrinter.Title)更具特性,因为还可以定义字体等
- //页顶(可选)
- //可以是以'|'分隔的字符串或一维数组或具有更多特性的Top/Bottom对象
- misGoldPrinter.Top = "作者:周方勇|2004-08-19|版本:V2.5"; //等价于 misGoldPrinter.Top = new string[]{"作者:周方勇","2004-08-19","版本:V2.5"};
- //((GoldPrinter.Top)(misGoldPrinter.Top)).IsDrawAllPage = false; //可以设置是否每页都打印,页顶、页头默认第一页打印,而页脚与页底默认最后一页打印
- #region 网格头说明(可选)
- 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、ListViewListView、
- 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");
- misGoldPrinter.Header = header; //将定制对象,赋给页头
- #endregion
- #region 网格标题(多层表头,符合中国人习惯),可选
- MultiHeader multiHeader = new MultiHeader(2,6); //两行6列的要合并分类说明的表头,如果只是单行表头且只要占用一行高度,用new MultiHeader(1,6)并用SetText赋值即可
- 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,"金额");
- multiHeader.ColsWidth = new int[]{50,100,120,80,100,150}; //指定每页列宽,因为是Body明细的列标题,所以明细的列宽和它设置一样。当然,你也可以不做明细的列标题
- misGoldPrinter.MultiHeader = multiHeader;
- #endregion
- //*****数据网格主体(必选)*****
- Body body = new Body();
- body.ColsAlignString = "CLCRRR"; //由左中右第一个字母组成,对应于每列的对对齐方式
- //只要是二维数组,都可以,因此DataGrid、MSHFlexGrid、DBGrid、DataTable、HtmlTable、ListView等等都OK
- //这里用DataGrid作一个例子。不过,你自己可以写一个函数,把没有支持的二维控件转换成数组就OK了
- //body.DataSource = this.GetDataSource(500);
- //body.DataSource = (DataTable)(this.dataGrid1.DataSource); //或者
- //body.DataSource = this.dataGrid1.DataSource; //或者
- body.DataSource = this.dataGrid1; //或者
- body.IsAverageColsWidth = false;
- //body.RowHeight = 20; //可指定行高
- body.ColsWidth = new int[]{50,100,120,80,100,150}; //若多层表头是些明细的列标题,列宽设置一样。注意单位用控件的显示单位,即像素,一毫约4个像素
- 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
- //body.Grid.ColsWidth = new int[]{20,50,100,200,300};
- misGoldPrinter.Body = body;
- //misGoldPrinter.DataSource = this.dataGrid1; //如果直接打印网格,可以不用定义Body,用这一句就够了,可加上下一句设置列宽
- //((Body)(misGoldPrinter.Body)).ColsWidth = new int[]{20,50,100,200,300};
- misGoldPrinter.IsSubTotalPerPage = true; //这是打印本页小计
- misGoldPrinter.SubTotalColsList = (mcols-2).ToString() + ";" + (mcols-1).ToString(); //用分号分隔的要求小计的列
- #region 网格下说明(可选)
- 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;
- misGoldPrinter.Footer = footer;
- #endregion
- #region 数据底(可选)
- GoldPrinter.Bottom bottom = new Bottom(); //Top/Bottom的另一种方式
- bottom.Text = "打印程序开源版||打印日期:" + System.DateTime.Now.ToLongDateString(); //用|分隔的三列文本,分别居左、居中、居右在页面中
- misGoldPrinter.Bottom = bottom;
- #endregion
- #region 装订线(可选)
- Sewing sewing = new Sewing(20,SewingDirectionFlag.Left); //左装订,边距为20个显示单位
- misGoldPrinter.Sewing = sewing;
- misGoldPrinter.IsSewingLine = true; //打印装订线
- #endregion
- misGoldPrinter.IsSubTotalPerPage = true; //每页加小计
- //打印或预览
- if (print)
- {
- misGoldPrinter.Print();
- }
- else
- {
- misGoldPrinter.Preview();
- }
- //释放,如果在当前过程中定义,就在这里释放
- //misGoldPrinter.Dispose();
- //misGoldPrinter = null;
- #endregion
- }
- private void frmAllPrint_Load(object sender, System.EventArgs e)
- {
- this.dataGrid1.DataSource = PrintDataSource.GetDataSource(500);
- }
- private void frmAllPrint_Closed(object sender, System.EventArgs e)
- {
- misGoldPrinter.Dispose();
- misGoldPrinter = null;
- }
- }//End Class
- }//End Namespace