




已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论