版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本文档是参考网上的资料,稍加修改,经过实际编译,可实现Winform上dataGridView控件的打印,并实现分页,下面为程序代码,仅供参考。本程序不需要在界面上添加任何打印相关控件。publicpartialclassExample:Form{//打印文檔PrintDocumentpdDocument=newPrintDocument();//打印格式設置頁面PageSetupDialogdlgPageSetup=newPageSetupDialog();//打印頁面PrintDialogdlgPrint=newPrintDialog();//實例化打印預覽PrintPreviewDialogdlgPrintPreview=newPrintPreviewDialog();publicExample(){InitializeComponent();pdDocument.PrintPage+=newPrintPageEventHandler(OnPrintPage);//頁面設置的打印文檔設置為需要打印的文檔dlgPageSetup.Document=pdDocument;//打印界面的打印文檔設置為被打印文檔dlgPrint.Document=pdDocument;//打印預覽的打印文檔設置為被打印文檔dlgPrintPreview.Document=pdDocument;}///<summary>/////顯示打印預覽界面,此处需要添加一个打印预览的按钮///</summary>///<paramname="sender"></param>///<paramname="e"></param>privatevoidbtnPrintView_Click(objectsender,EventArgse){dlgPrintPreview.ShowDialog();///<summary>///打印设置,此处需要添加一个打印设置的按钮///</summary>///<paramname="sender"></param>///<paramname="e"></param>privatevoidbtnPrintSetup_Click(objectsender,EventArgse){dlgPageSetup.ShowDialog();dlgPrint.ShowDialog();}///IllprintDocument的PrintPage事件,实现打印功能///llllllprivatevoidOnPrintPage(objectsender,PrintPageEventArgse){intiX=60;intiY=40;PrintDataGridView11.Print(dataGridView1,true,e,refiX,refiY);}lll<summary>lll打印,此处需添加一个打印按钮lll<lsummary>lll<paramname="sender"><lparam>lll<paramname="e"><lparam>privatevoidbtnPrint_Click(objectsender,EventArgse){pdDocument.Print();}}lll<summary>Ill实现DataGridView的打印类lll<lsummary>publicclassPrintDataGridView11{privatestaticList<DataGridViewCellPrint>CellPrintList=newList<DataGridViewCellPrint>();lll<summary>lll打印的行数///</summary>privatestaticintprintRowCount=0;///<summary>///是否要打印///</summary>privatestaticboolIsPrint=true;///<summary>///设置的起始位置是否大于默认打印的边框///</summary>privatestaticboolIsRole=true;///<summary>IllX坐标///</summary>privatestaticintPoXTmp=0;lll<summary>IllY坐标lll<lsummary>privatestaticintPoYTmp=0;lll<summary>lll列间距lll<lsummary>privatestaticintWidthTmp=0;lll<summary>lll行间距lll<lsummary>privatestaticintHeightTmp=0;lll<summary>lll列数lll<lsummary>privatestaticintRowIndex=0;lllIll打印DataGridView控件llllllDataGridView控件lll是否包括列标题lll为System.Drawing.Printing.PrintDocument.PrintPage事件提供数据。lll起始X坐标lll起始Y坐标lllpublicstaticvoidPrint(DataGridViewdataGridView,boolincludeColumnText,PrintPageEventArgseValue,refintPoX,refintPoY)tryif(PrintDataGridView11.IsPrint){PrintDataGridView11.printRowCount=0;PrintDataGridView11.IsPrint=false;PrintDataGridView11.DataGridViewCellVsList(dataGridView,includeColumnText);//获取要打印的数据if(0==PrintDataGridView11.CellPrintList.Count)return;if(PoX>eValue.MarginBounds.Left)//如果设置的起始位置大于默认打印的边框,IsRole为truePrintDataGridView11.IsRole=true;elsePrintDataGridView11.IsRole=false;PrintDataGridView11.PoXTmp=PoX;PrintDataGridView11.PoYTmp=PoY;PrintDataGridView11.RowIndex=0;WidthTmp=0;HeightTmp=0;}f(0!=PrintDataGridViewll.printRowCount)//换页后确定打印的初始位置{if(IsRole)//如果设置的起始位置大于默认打印的边框,起始位置为默认打印边框{PoX=PoXTmp=eValue.MarginBounds.Left;PoY=PoYTmp=eValue.MarginBounds.Top;}else{PoX=PoXTmp;PoY=PoYTmp;}}while(PrintDataGridView11.printRowCount<PrintDataGridView11.CellPrintList.Count){DataGridViewCellPrintCellPrint=CellPrintList[PrintDataGridView11.printRowCount];f(RowIndex==CellPrint.RowIndex)//—行一行打印,CellPrint.RowIndex为datagridview1的行号PoX=PoX+WidthTmp; 〃如果数据在一行,x坐标右移else//换行后Y坐标下移,X坐标回到初始位置PoX=PoXTmp;PoY=PoY+HeightTmp;f(PoY+HeightTmp>eValue.MarginBounds.Bottom)//分页{HeightTmp=0;eValue.HasMorePages=true;return;〃重新触发OnPrintPage事件}}using(SolidBrushsolidBrush=newSolidBrush(CellPrint.BackColor)){RectangleFrectF1=newRectangleF(PoX,PoY,CellPrint.Width,CellPrint.Height);eValue.Graphics.FillRectangle(solidBrush,rectF1);using(Penpen=newPen(Color.Black,1))eValue.Graphics.DrawRectangle(pen,System.Drawing.Rectangle.Round(rectF1));〃画出单个数据的方框格子solidBrush.Color=CellPrint.ForeColor;eValue.Graphics.DrawString(CellPrint.FormattedValue,CellPrint.Font,solidBrush,newSystem.Drawing.Point(PoX+2,PoY+3));//在方框中画出数据}WidthTmp=CellPrint.Width;HeightTmp=CellPrint.Height;RowIndex=CellPrint.RowIndex;PrintDataGridView11.printRowCount++;}PoY=PoY+HeightTmp;〃全部打印完后不再分页eValue.HasMorePages=false;PrintDataGridView11.IsPrint=true;}catch{eValue.HasMorePages=false;PrintDataGridView11.IsPrint=true;throw;//抛出异常}}//////将DataGridView控件内容转变至0CellPrintList//////DataGridView控件///是否包括列标题///privatestaticvoidDataGridViewCellVsList(DataGridViewdataGridView,boolincludeColumnText){CellPrintList.Clear();try{introwsCount=dataGridView.Rows.Count;intcolsCount=dataGridView.Columns.Count;//最后一行是供输入的行时,不用读数据。if(dataGridView.Rows[rowsCount-1].IsNewRow)rowsCount--;//包括列标题if(includeColumnText){for(intcolumnsIndex=0;columnsIndex<colsCount;columnsIndex++){if(dataGridView.Columns[columnsIndex].Visible){DataGridViewCellPrintCellPrint=newDataGridViewCellPrint();CellPrint.FormattedValue=dataGridView.Columns[columnsIndex].HeaderText;CellPrint.RowIndex=0;CellPrint.ColumnIndex=columnsIndex;CellPrint.Font=dataGridView.Columns[columnsIndex].HeaderCell.Style.Font;CellPrint.BackColor=dataGridView.ColumnHeadersDefaultCellStyle.BackColor;CellPrint.ForeColor=dataGridView.ColumnHeadersDefaultCellStyle.ForeColor;CellPrint.Width=dataGridView.Columns[columnsIndex].Width;CellPrint.Height=dataGridView.ColumnHeadersHeight;CellPrintList.Add(CellPrint);//add:每次添加一个数据}}}//读取单元格数据for(introwIndex=0;rowIndex<rowsCount;rowIndex++){for(intcolumnsIndex=0;columnsIndex<colsCount;columnsIndex++){if(dataGridView.Columns[columnsIndex].Visible){DataGridViewCellPrintCellPrint=newDataGridViewCellPrint();CellPrint.FormattedValue=dataGridView.Rows[rowIndex].Cells[columnsIndex].FormattedValue.ToString();if(includeColumnText)CellPrint.RowIndex=rowIndex+1//假如包括列标题则从行号1开始elseCellPrint.RowIndex=rowIndex;CellPrint.ColumnIndex=columnsIndex;CellPrint.Font=dataGridView.Rows[rowIndex].Cells[columnsIndex].Style.Font;System.Drawing.ColorTmpColor=System.Drawing.Color.Empty;if(System.Drawing.Color.Empty!=dataGridView.Rows[rowIndex].Cells[columnsIndex].Style.BackColor)TmpColor=dataGridView.Rows[rowIndex].Cells[columnsIndex].Style.BackColor;elseif(System.Drawing.Color.Empty!=dataGridView.Rows[rowIndex].DefaultCellStyle.BackColor)TmpColor=dataGridView.Rows[rowIndex].DefaultCellStyle.BackColor;elseTmpColor=dataGridView.DefaultCellStyle.BackColor;CellPrint.BackColor=TmpColor;TmpColor=System.Drawing.Color.Empty;if(System.Drawing.Color.Empty!=dataGridView.Rows[rowIndex].Cells[columnsIndex].Style.ForeColor)TmpColor=dataGridView.Rows[rowIndex].Cells[columnsIndex].Style.ForeColor;elseif(System.Drawing.Color.Empty!=dataGridView.Rows[rowIndex].DefaultCellStyle.ForeColor)TmpColor=dataGridView.Rows[rowIndex].DefaultCellStyle.ForeColor;elseTmpColor=dataGridView.DefaultCellStyle.ForeColor;CellPrint.ForeColor=TmpColor;CellPrint.Width=dataGridView.Columns[columnsIndex].Width;CellPrint.Height=dataGridView.Rows[rowIndex].Height;CellPrintList.Add(CellPrint);}}}}catch{throw;}privateclassDataGridViewCellPrint{///<summary>///格式化的单元格的值///</summary>privatestring_FormattedValue="";privateint_RowIndex=-1;privateint_ColumnIndex=-1;privateSystem.Drawing.Color_ForeColor=System.Drawing.Color.Black;privateSystem.Drawing.Color_BackColor=System.Drawing.Color.White;privateint_Width=100;privateint_Height=23;privateSystem.Drawing.Font_Font=newSystem.Drawing.Font("宋体;9F,System.Drawing.FontStyle.Regular,System.Drawing.GraphicsUnit.Point,((byte)(134)));///<summary>///获取或设置单元格的字体。///<summary>publicSystem.Drawing.FontFont{set{if(null!=value)_Font=value;}get{return_Font;}}///<summary>///获取为显示进行格式
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度房屋买卖合同标的及属性确认书
- 2024年度信息技术系统集成及安装服务合同
- 2024年度体育赛事赞助合同:某国际体育赛事赞助协议
- 2024年度城市规划!河南一地政府与设计院合同
- 2024年度度民警被装采购项目质量保证合同
- 2024年度技术咨询合同标的、咨询领域与服务期限
- 2024年度影视制作内部承包合同协议
- 医用杀寄生虫药市场发展现状调查及供需格局分析预测报告
- 2024年度混凝土泵送工程进度与成本控制合同
- 2024年度版权买卖合同标的约定
- 第五单元大单元教学课件 2024-2025学年统编版语文七年级上册
- DB32T 2618-2023 高速公路工程施工安全技术规范
- 2024年新苏教版五年级上册科学全册期末复习知识点
- 公司项目管理规范制度
- 电力专业数据传输(EPDT)通信系统 空中接口物理层及数据链路层技术规范 标准编制说明
- 07MS101 市政给水管道工程及附属设施
- 以租代购购买房产合同
- 大学生创业英语智慧树知到期末考试答案章节答案2024年广西师范大学
- 个人停车位租赁合同范本(2024版)
- 飞机仪电与飞控系统原理智慧树知到期末考试答案章节答案2024年中国人民解放军海军航空大学
- 2024版小程序开发服务合同范本
评论
0/150
提交评论