已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
下的 DataGridView打印Public Class PrintToolStrip Inherits ToolStrip Private WithEvents ToolStripButton1, ToolStripButton2, ToolStripButton3, ToolStripButton4 As New ToolStripButton Private WithEvents PrintDocument1 As New Printing.PrintDocument Private WithEvents PageSetupDialog1 As New System.Windows.Forms.PageSetupDialog Private WithEvents FontDialog1 As New System.Windows.Forms.FontDialog Private WithEvents PrintPreviewDialog1 As New System.Windows.Forms.PrintPreviewDialog Private DGV As DataGridView Private strTitle As String Private tsiDisplayStyle As ToolStripItemDisplayStyle = ToolStripItemDisplayStyle.Image Private tirTextImageRelation As TextImageRelation = Windows.Forms.TextImageRelation.ImageAboveText wInc 为单元格宽增量 Private wInc As Single = 5 hInc 为单元格竖增量 Private hInc As Single = 5 MainStartHeigth 为主体表格起始的高度 Private MainStartHeigth As Single pNo 为页码 Shared pNo As Integer = 1 Private StartHeigth As Single Private StartPos As Single Shared hi As Integer = 0 Private PrintFont As Font = Me.Font 数组 ColumnsWidth 为计算后的列宽 Private ColumnsWidth() As Single 数组 orgColumnsWidth 为原始的最大列宽 Private orgColumnsWidth() As Single RowHeigth 为计算后的行高 Private RowHeigth As Single 数据源,输入DataGridView Public Property MyDataGridView() As DataGridView Set(ByVal value As DataGridView) DGV = value End Set Get Return DGV End Get End Property 报表标题 Public Property Title() As String Set(ByVal value As String) strTitle = value End Set Get Return strTitle End Get End Property 按钮显示方式 _ Public Property DisplayStyle() As ToolStripItemDisplayStyle Set(ByVal value As ToolStripItemDisplayStyle) tsiDisplayStyle = value End Set Get Return tsiDisplayStyle End Get End Property 图片文字显示位置 _ Public Property TextImageRelation() As TextImageRelation Set(ByVal value As TextImageRelation) tirTextImageRelation = value End Set Get Return tirTextImageRelation End Get End Property 设置按钮显示方式 Private Sub SetButtonDisplayStyle() Me.ToolStripButton1.DisplayStyle = DisplayStyle Me.ToolStripButton2.DisplayStyle = DisplayStyle Me.ToolStripButton3.DisplayStyle = DisplayStyle Me.ToolStripButton4.DisplayStyle = DisplayStyle End Sub 设置按钮图片文字位置 Private Sub SetButtonTextImageRelation() Me.ToolStripButton1.TextImageRelation = TextImageRelation Me.ToolStripButton2.TextImageRelation = TextImageRelation Me.ToolStripButton3.TextImageRelation = TextImageRelation Me.ToolStripButton4.TextImageRelation = TextImageRelation End Sub 遍历整个表格,得到每列的最大宽度 Private Sub GetLargestWidthOfColumn(ByVal g As System.Drawing.Graphics) 定义列宽数组的长度 ReDim ColumnsWidth(MyDataGridView.Columns.Count - 1) ReDim orgColumnsWidth(MyDataGridView.Columns.Count - 1) For i As Integer = 0 To MyDataGridView.Columns.Count - 1 如果列为隐藏,不打印 If MyDataGridView.Columns(i).Visible = False Then Continue For End If ColumnsWidth(i) = MyDataGridView.Columns(i).Width Next Dim g As System.Drawing.Graphics Dim iC, iR As Integer For iC = 0 To MyDataGridView.Columns.Count - 1 如果列为隐藏,不打印 If MyDataGridView.Columns(iC).Visible = False Then Continue For End If Dim dc As DataGridViewColumn = MyDataGridView.Columns(iC) 计算列头文字需要的宽 Dim sizeFHeader As Drawing.SizeF sizeFHeader = g.MeasureString(dc.HeaderText, PrintFont) orgColumnsWidth(iC) = sizeFHeader.Width RowHeigth = sizeFHeader.Height dc.Dispose() 计算值的宽 For iR = 0 To MyDataGridView.Rows.Count - 1 Dim dr As DataGridViewRow = MyDataGridView.Rows(iR) If dr.Cells(iC).Value IsNot Nothing AndAlso Not IsDBNull(dr.Cells(iC).Value) Then sizeFHeader = g.MeasureString(dr.Cells(iC).Value.ToString, PrintFont) If orgColumnsWidth(iC) pWidth Then Exit For End If Next Return (k) End Function 根据合适的列宽和列宽缩小的比例,计算出合适的行高 Private Sub GetFitHeightOfRow(ByVal pScale As Integer) RowHeigth = RowHeigth * Fix(100 / pScale) + 1) + hInc End Sub 打印主体 Private Sub pd_PrintMain(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage Dim g As Graphics = e.Graphics 如果是第一页,计算长宽 If pNo = 1 Then GetLargestWidthOfColumn(g) GetFitHeightOfRow(GetFitWidthOfColumn(e.MarginBounds.Width) End If 添加DataGridView主体 计算标题的高度,预留空间 Dim sizeFTitle As Drawing.SizeF Dim Title As String = 这次报表的标题应该够长了吧,哈哈哈哈 sizeFTitle = e.Graphics.MeasureString(Title, New Font(宋体, 30, FontStyle.Bold) MainStartHeigth = sizeFTitle.Height + e.MarginBounds.Top StartHeigth = MainStartHeigth -再来开始- 添加列头,按已经求出的最长宽度 起始位置为纸张可打印边框的左边 StartPos = e.MarginBounds.Left Dim i As Integer For i = 0 To MyDataGridView.Columns.Count - 1 如果列为隐藏,不打印 If MyDataGridView.Columns(i).Visible = False Then Continue For End If Dim dc As DataGridViewColumn dc = MyDataGridView.Columns(i) Dim sizeFHeader As New Drawing.SizeF sizeFHeader = e.Graphics.MeasureString(dc.HeaderText, PrintFont, ColumnsWidth(i) 写表头 g.DrawString(dc.HeaderText, PrintFont, Drawing.Brushes.Black, New RectangleF(StartPos + wInc, StartHeigth + hInc, ColumnsWidth(i) - wInc, RowHeigth - hInc) 添加外边框 上 g.DrawLine(Pens.Black, StartPos, StartHeigth, StartPos + ColumnsWidth(i), StartHeigth) 左 g.DrawLine(Pens.Black, StartPos, StartHeigth, StartPos, StartHeigth + RowHeigth) StartPos += ColumnsWidth(i) Next 添加主体 StartHeigth += RowHeigth While hi MyDataGridView.Rows.Count And StartHeigth e.MarginBounds.Height StartPos = e.MarginBounds.Left Dim obj As New Object Dim wi As Integer = 0 For wi = 0 To MyDataGridView.Columns.Count - 1 如果列为隐藏,不打印 If MyDataGridView.Columns(wi).Visible = False Then Continue For End If Dim dcWidth As Single dcWidth = ColumnsWidth(wi) 上 g.DrawLine(Pens.Black, StartPos, StartHeigth, StartPos + dcWidth, StartHeigth) 左 g.DrawLine(Pens.Black, StartPos, StartHeigth, StartPos, StartHeigth + RowHeigth) StartPos += dcWidth Try If Not IsDBNull(MyDataGridView.Rows(hi).Cells(wi).Value) Then g.DrawString(MyDataGridView.Rows(hi).Cells(wi).Value, PrintFont, Drawing.Brushes.Black, New RectangleF(StartPos - dcWidth + 2, StartHeigth + 3, dcWidth + 2, RowHeigth) End If Catch ex As Exception MsgBox(ex.Message) End Try Next StartHeigth += RowHeigth hi += 1 End While 如果是第一页,添加表头 根据绘制表格的宽度添加标题() If pNo = 1 Then If StartPos - e.MarginBounds.Left sizeFTitle.Width Then 如果标题的宽度大于表格的宽度,则缩小标题字号 For i = 30 To 1 Step -1 sizeFTitle = e.Graphics.MeasureString(Title, New Font(宋体, i, FontStyle.Bold) If sizeFTitle.Width e.MarginBounds.Height And hi = MyDataGridView.Rows.Count Then And e.HasMorePages.Equals(False) Then hi = 0 pNo = 1 Exit Sub End If End Sub Private Sub ToolStripButton3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton3.Click Me.PageSetupDialog1.Document = Me.PrintDocument1 Me.PageSetupDialog1.ShowDialog() Me.PrintDocument1.DefaultPageSettings = Me.PageSetupDialog1.PageSettings End Sub Private Sub ToolStripButton4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton4.Click Me.FontDialog1.ShowDialog() PrintFont = Me.FontDialog1.Font End Sub Private Sub ToolStripButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton1.Click Me.PrintPreviewDialog1.Document = Me.PrintDocument1 Me.PrintPreviewDialog1.ShowDialog() End Sub Private Sub ToolStripButton2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton2.Click Me.PrintDocument1.Print(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 风电场工作票操作票管理细则
- 2025年小学时的美术考试题及答案
- DB1309T 61-2025 肉鸡 卫生防疫规程
- DB1309T 313-2025 餐饮服务经营单位反餐饮浪费行为规范
- 照明光环境质量分析-洞察与解读
- 2025年公司的行政助理岗位招聘面试参考题库及参考答案
- 2025年生产线管理专员岗位招聘面试参考试题及参考答案
- 2025年医疗售后服务专员岗位招聘面试参考试题及参考答案
- 2025年地方政府公务员岗位招聘面试参考试题及参考答案
- 电影数据驱动剧本创作-洞察与解读
- DB36T 1593-2022 高速公路日常养护技术规范
- 电力配网投标技术文件
- 省建设工程施工图审查中心方案节能评审意见书
- 互联网广告行业广告投放策略优化方案
- 装修案例汇报
- 非新生儿破伤风诊疗规范(2024年版)解读
- 6大国工匠百炼成器教案-蓝色
- 食品生产企业产品贮存运输及交付管理制度
- DB3301-T 65.11-2024 反恐怖防范系统管理规范 第11部分:医院
- 2025届广东省深圳市深圳实验学校初中部联考化学九年级第一学期期末综合测试试题含解析
- 第15节 辽宋夏金元的文化和科技 知识清单 高三统编版(2019)历史一轮复习(选必融合)
评论
0/150
提交评论