已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
使用方法:1. 在VS中创建打印类 类名为“DgPrint”2. 在程序中使用打印类 Dim DgvPrint as New DgPrint.PrintService DgvPrint.Print(“打印文档的标题”,datagridviews) 其中datagridviews为你所需打印的datagridviewImports System.Collections.GenericImports System.Windows.FormsImports System.DrawingImports System.CollectionsImports System.DataImports System.TextNamespace DgPrint Public Class PrintService Private StrFormat As StringFormat 单元格内容 Private RowPos As Integer 当前打印行 Private NewPage As Boolean 判断是否为新页 Private PageNo As Integer 打印页数 Private CellHeight As Integer 打印的单元格高度 Private RowsPerPage As Integer 每页的行数 Private printDoc As New System.Drawing.Printing.PrintDocument() 用于打印的PrintDocumnet Object Private ColumnLefts As New ArrayList() 列的左坐标 Private ColumnWidths As New ArrayList() 列的宽度 Private PrintTitle As String = 标题 Private AvailableColumns As New List(Of String)() datagridview中可见的列 Private HeaderHeight As Integer = 0 Private grid As DataGridView 打印 Public Sub Print(ByVal grid As DataGridView, ByVal Title As String) Dim ppvw As PrintPreviewDialog Try 获取要打印的datagridview Me.grid = grid 获取datagridview中所有可见的列的标题 AvailableColumns.Clear() For Each c As DataGridViewColumn In grid.Columns If c.Visible = True Then AvailableColumns.Add(c.HeaderText) End If Next 显示打印属性窗体 PrintTitle = Title RowsPerPage = 0 printDoc.DocumentName = Dim dia As New PrintDialog() dia.PrintToFile = False dia.Document = printDoc dia.UseEXDialog = True If dia.ShowDialog() DialogResult.OK Then Return End If ppvw = New PrintPreviewDialog() ppvw.WindowState = FormWindowState.Maximized ppvw.Document = printDoc 显示打印预览页 AddHandler printDoc.BeginPrint, New System.Drawing.Printing.PrintEventHandler(AddressOf PrintGridDoc_BeginPrint) AddHandler printDoc.PrintPage, New System.Drawing.Printing.PrintPageEventHandler(AddressOf PrintGridDoc_PrintPage) If ppvw.ShowDialog() DialogResult.OK Then RemoveHandler printDoc.BeginPrint, New System.Drawing.Printing.PrintEventHandler(AddressOf PrintGridDoc_BeginPrint) RemoveHandler printDoc.PrintPage, New System.Drawing.Printing.PrintPageEventHandler(AddressOf PrintGridDoc_PrintPage) Return End If 打印文件 printDoc.Print() RemoveHandler printDoc.BeginPrint, New System.Drawing.Printing.PrintEventHandler(AddressOf PrintGridDoc_BeginPrint) RemoveHandler printDoc.PrintPage, New System.Drawing.Printing.PrintPageEventHandler(AddressOf PrintGridDoc_PrintPage) Catch ex As Exception Finally End Try End Sub Private Sub PrintGridDoc_BeginPrint(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintEventArgs) Try StrFormat = New StringFormat() StrFormat.Alignment = StringAlignment.Center 居中 StrFormat.LineAlignment = StringAlignment.Center StrFormat.Trimming = StringTrimming.EllipsisCharacter ColumnLefts.Clear() ColumnWidths.Clear() CellHeight = 0 RowsPerPage = 0 PageNo = 1 NewPage = True RowPos = 0 Catch ex As Exception End Try End Sub Private Sub PrintGridDoc_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Dim tmpWidth As Integer, i As Integer Dim tmpTop As Integer = e.MarginBounds.Top Dim tmpLeft As Integer = e.MarginBounds.Left Dim font As New Font(宋体, 9) Dim font_BT As New Font(宋体, 18) Dim font_C As New Font(宋体, 12) Try If PageNo = 1 Then For Each GridCol As DataGridViewColumn In grid.Columns If GridCol.Visible Then 获取列的宽度及高度 tmpWidth = GridCol.Width HeaderHeight = 33 获取列的宽度、高度及类型 ColumnLefts.Add(tmpLeft) ColumnWidths.Add(tmpWidth) tmpLeft += tmpWidth End If Next End If 逐行打印当前页 While RowPos = e.MarginBounds.Height + e.MarginBounds.Top Then 不能 DrawGridFooter(e, RowsPerPage) NewPage = True PageNo += 1 e.HasMorePages = True Return Else If NewPage Then 打印标题 e.Graphics.DrawString(PrintTitle, New Font(font_BT, FontStyle.Bold), Brushes.Black, e.MarginBounds.Width - e.Graphics.MeasureString(PrintTitle, New Font(font_BT, FontStyle.Bold), e.MarginBounds.Width).Width, e.MarginBounds.Top - e.Graphics.MeasureString(PrintTitle, New Font(font_BT, FontStyle.Bold), e.MarginBounds.Width).Height - 13, StrFormat) Dim s As String = DateTime.Now.ToLongDateString() & & DateTime.Now.ToShortTimeString() e.Graphics.DrawString(s & 统计, New Font(font, FontStyle.Bold), Brushes.Black, e.MarginBounds.Left + (e.MarginBounds.Width - 1.5 * e.Graphics.MeasureString(s, New Font(font, FontStyle.Bold), e.MarginBounds.Width).Width), e.MarginBounds.Top - e.Graphics.MeasureString(PrintTitle, New Font(New Font(font, FontStyle.Bold), FontStyle.Bold), e.MarginBounds.Width).Height - 13) 打印列 tmpTop = e.MarginBounds.Top i = 0 For Each GridCol As DataGridViewColumn In grid.Columns If GridCol.Visible = True Then e.Graphics.FillRectangle(New SolidBrush(Color.LightGray), New Rectangle(CInt(ColumnLefts(i), tmpTop, CInt(ColumnWidths(i), HeaderHeight) e.Graphics.DrawRectangle(Pens.Black, New Rectangle(CInt(ColumnLefts(i), tmpTop, CInt(ColumnWidths(i), HeaderHeight) e.Graphics.DrawString(GridCol.HeaderText, New Font(font_C, FontStyle.Bold), New SolidBrush(Color.Black), New RectangleF(CInt(ColumnLefts(i), tmpTop, CInt(ColumnWidths(i), HeaderHeight), StrFormat) i += 1 End If Next NewPage = False tmpTop += HeaderHeight End If 打印各列内容 i = 0 For Each Cel As DataGridViewCell In GridRow.Cells If grid.Columns(Cel.ColumnIndex).Visible = True Then e.Graphics.DrawString(Cel.Value.ToString(), font, New SolidBrush(Color.Black), New RectangleF(CInt(ColumnLefts(i), CSng(tmpTop), CInt(ColumnWidths(i), CSng(CellHeight), StrFormat) 表格边界 e.Graphics.DrawRectangle(Pens.Black, New Rectangle(CInt(ColumnLefts(i), tmpTop, CInt(ColumnWidths(i), CellHeight) i += 1 End If Next tmpTop += CellHeight End If RowPos += 1 计算每页打印多少行 If PageNo = 1 Then RowsPerPage += 1 End If End While If RowsPerPage = 0 Then Return End If 打印页脚 DrawGridFooter(e, RowsPerPage) e.HasMorePag
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年深圳中考数学复习分类汇编:填空中档重点题(二)解析版
- 2026年深圳中考数学复习分类汇编之解答中档题型:圆的计算与证明(解析版)
- 医学流行病学答辩缺失数据处理教学课件
- 医学慢阻肺合并认知障碍干预案例分析课件
- 《JBT 6271-1992 半喂入联合收割机技术条件》(2026年)实施指南
- 《JBT 6188.3-1992 16mm 槽系组合夹具紧固件 长方头槽用螺栓》(2026年)实施指南
- 沼气生产工复测考核试卷含答案
- 旅游定制服务师操作规程考核试卷含答案
- 2025人教版八年级数学上册 三角形全等的判定(第5课时)教案
- 电力电容器心体加工工创新思维考核试卷含答案
- 火龙罐联合耳穴压豆治疗失眠个案护理
- 病理切片制作技术-课件
- 2023版思想道德与法治专题1 担当复兴大任 成就时代新人
- 某县接受省义务教育质量监测的情况反馈报告
- GB/T 6074-1995板式链、端接头及槽轮
- GB/T 13871.1-2007密封元件为弹性体材料的旋转轴唇形密封圈第1部分:基本尺寸和公差
- 小学英语逆向教学设计策划课件
- 食品原料、食品添加剂、食品相关产品进货查验记录台账
- 洁净车间管理培训课件
- 荣誉证书模板范例可修改
- 糖尿病治疗-三重奏到八重奏课件
评论
0/150
提交评论