没有合适的资源?快使用搜索试试~ 我知道了~
首页在vb.net下实现的打印datagridview的类 源代码
在vb.net下实现的打印datagridview的类 源代码
4星 · 超过85%的资源 需积分: 18 90 下载量 182 浏览量
更新于2023-03-16
评论
收藏 88KB DOC 举报
在vb.net下实现的打印datagridview的类,在vb.net下实现的打印datagridview的类 源代码
资源详情
资源评论
资源推荐
在 vb.net 下实现的打印 datagridview 的类
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 = New Font("arial", 16) '数组 ColumnsWidth 为计算后的列宽
Private ColumnsWidth() As Single
'数组 orgColumnsWidth 为原始的最大列宽
Private orgColumnsWidth() As Single 'RowHeigth 为计算后的行高
Private RowHeigth As Single '数据源,输入 DataGridView
Sub New()
AddHandler PrintDocument1.PrintPage, AddressOf Me.pd_PrintMain
End Sub
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 '按钮显示方式
'遍历整个表格,得到每列的最大宽度
Private Sub GetLargestWidthOfColumn(ByVal g As System.Drawing.Graphics) '定义列宽
数组的长度
ReDim ColumnsWidth(DGV.Columns.Count - 1)
ReDim orgColumnsWidth(DGV.Columns.Count - 1)
For i As Integer = 0 To DGV.Columns.Count - 1 '如果列为隐藏,不打印
If DGV.Columns(i).Visible = False Then
Continue For
End If
ColumnsWidth(i) = DGV.Columns(i).Width
Next
' Dim g As System.Drawing.Graphics
Dim iC, iR As Integer
For iC = 0 To DGV.Columns.Count - 1 '如果列为隐藏,不打印
If DGV.Columns(iC).Visible = False Then
Continue For
End If
Dim dc As DataGridViewColumn = DGV.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 DGV.Rows.Count - 1
Dim dr As DataGridViewRow = DGV.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) < sizeFHeader.Width Then
orgColumnsWidth(iC) = sizeFHeader.Width
End If
End If
dr.Dispose()
Next
Next
End Sub '根据纸张宽度,计算出合适的列宽,返回缩小的比例
Private Function GetFitWidthOfColumn(ByVal pWidth As Single) As Integer
'每列按原始宽度的 1%递减,直到适合纸张宽度(pWidth)
Dim l, i, k As Integer
l = orgColumnsWidth.Length
For k = 100 To 1 Step -1
Dim WidthSum As Single = 0 '按比例求宽度
For i = 0 To l - 1
ColumnsWidth(i) = orgColumnsWidth(i) * k / 100
WidthSum += orgColumnsWidth(i) * k / 100 + wInc
Next
If Not WidthSum > 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)
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 DGV.Columns.Count - 1
'如果列为隐藏,不打印
If DGV.Columns(i).Visible = False Then
Continue For
End If
Dim dc As DataGridViewColumn
dc = DGV.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))
'添加外边框
'上
剩余13页未读,继续阅读
irisfly89
- 粉丝: 34
- 资源: 100
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- ExcelVBA中的Range和Cells用法说明.pdf
- 基于单片机的电梯控制模型设计.doc
- 主成分分析和因子分析.pptx
- 共享笔记服务系统论文.doc
- 基于数据治理体系的数据中台实践分享.pptx
- 变压器的铭牌和额定值.pptx
- 计算机网络课程设计报告--用winsock设计Ping应用程序.doc
- 高电压技术课件:第03章 液体和固体介质的电气特性.pdf
- Oracle商务智能精华介绍.pptx
- 基于单片机的输液滴速控制系统设计文档.doc
- dw考试题 5套.pdf
- 学生档案管理系统详细设计说明书.doc
- 操作系统PPT课件.pptx
- 智慧路边停车管理系统方案.pptx
- 【企业内控系列】企业内部控制之人力资源管理控制(17页).doc
- 温度传感器分类与特点.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论9