DataGridView单元格合并VB实现
更新时间:2024-04-10 18:33:01 阅读量: 综合文库 文档下载
DataGridView单元格合并VB.NET实现
已封装成类,调用方便。 效果如下:
Public Class Form1
Private cmb As CmbDatagridbiew
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load '测试数据
DataGridView1.ColumnCount = 6 DataGridView1.Columns(0).Name = \ DataGridView1.Columns(1).Name = \ DataGridView1.Columns(2).Name = \ DataGridView1.Columns(3).Name = \ DataGridView1.Columns(4).Name = \ DataGridView1.Columns(5).Name = \
Dim row As String() = New String() {\, \, \, \, \, \} : DataGridView1.Rows.Add(row)
row = New String() {\, \, \, \, \, \} : DataGridView1.Rows.Add(row)
row = New String() {\, \, \, \, \, \} : DataGridView1.Rows.Add(row)
row = New String() {\, \, \, \, \, \} : DataGridView1.Rows.Add(row)
'调用
cmb = New CmbDatagridbiew(Me.DataGridView1)
cmb.Add(0, 0, 1, 2) '要合并的单元格·([行索引·左上],[列索引·左上],[行索引·右下],[列索引·右下])
cmb.Add(1, 3, 3, 4) '要合并的单元格·([行索引·左上],[列索引·左上],[行索引·右下],[列索
引·右下])
End Sub End Class
'*********************************************************************** '*********************************************************************** '·合并单元格类 '·调用示例: ' 声明
' Private cmb As CmbDatagridbiew '
' 表格加载完成后
' cmb = New CmbDatagridbiew(Me.DataGridView1) ' cmb.Add(0, 0, 1, 2)
' * 参数说明:([行索引·左上],[列索引·左上],[行索引·右下],[列索引·右下]) ' * 【0,0】 【0,1】 【0,2】 ' * 【1,0】 【1,1】 【1,2】 ' * cmb.Add(0, 0, 1, 2)
'*********************************************************************** Public Class CmbDatagridbiew
Private data As New List(Of MyRect) Private Dgv As DataGridView
Public Sub New(_dgv As DataGridView) Me.Dgv = _dgv
AddHandler _dgv.CellPainting, AddressOf DGV_CellPainting End Sub
Public Sub Add(_rect As MyRect) Me.data.Add(_rect) Me.SetCellEnabled(_rect) End Sub
Public Sub Add(_top As Integer, _left As Integer, _bottom As Integer, _right As Integer) Me.data.Add(New MyRect(_top, _left, _bottom, _right)) Me.SetCellEnabled(New MyRect(_top, _left, _bottom, _right)) End Sub
Private Sub SetCellEnabled(_rect As MyRect) For i = _rect.Top To _rect.Bottom For j = _rect.Left To _rect.Right
Me.Dgv.Rows(i).Cells(j).ReadOnly = True Next Next End Sub
Private Function InRects(rowIndex As Integer, colIndex As Integer) As Integer For i = 0 To Me.data.Count - 1
If Me.data(i).InRect(rowIndex, colIndex) Then Return i Next Return -1 End Function
Private Sub DGV_CellPainting(sender As Object, e As DataGridViewCellPaintingEventArgs) Using gridBrush As Brush = New SolidBrush(Me.Dgv.GridColor), backColorBrush As SolidBrush = New SolidBrush(e.CellStyle.BackColor) Using gridLinePen = New Pen(gridBrush) If Me.data.Count = 0 Then Return
Dim index As Integer = Me.InRects(e.RowIndex, e.ColumnIndex) If index = -1 Then Return
e.Graphics.FillRectangle(backColorBrush, e.CellBounds)
If e.RowIndex = Me.data(index).Bottom Then e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left, e.CellBounds.Bottom - 1, e.CellBounds.Right - 1, e.CellBounds.Bottom - 1) If e.ColumnIndex = Me.data(index).Right Then e.Graphics.DrawLine(gridLinePen, e.CellBounds.Right - 1, e.CellBounds.Top, e.CellBounds.Right - 1, e.CellBounds.Bottom - 1) e.Handled = True
For i = 0 To Me.data.Count - 1
Dim rect1 As Rectangle = Me.Dgv.GetCellDisplayRectangle(Me.data(i).Left, Me.data(i).Top, False)
Dim rect2 As Rectangle = Me.Dgv.GetCellDisplayRectangle(Me.data(i).Right, Me.data(i).Bottom, False)
Dim rect As New Rectangle(rect1.Left, rect1.Top, rect2.Right - rect1.Left, rect2.Bottom - rect1.Top)
Dim text As String Try text =
Me.Dgv.Rows(Me.data(i).Top).Cells(Me.data(i).Left).Value.ToString().Trim() Catch ex As Exception text = \ End Try
Dim sz As Drawing.SizeF = e.Graphics.MeasureString(text, e.CellStyle.Font) e.Graphics.DrawString(text, e.CellStyle.Font, New
SolidBrush(e.CellStyle.ForeColor), rect.Left + (rect.Width - sz.Width) / 2, rect.Top + (rect.Height - sz.Height) / 2, StringFormat.GenericDefault) Next End Using End Using End Sub End Class
Public Class MyRect Public Top As Integer
Public Right As Integer Public Bottom As Integer Public Left As Integer
Public Sub New(_top As Integer, _left As Integer, _bottom As Integer, _right As Integer) Me.Top = _top Me.Right = _right Me.Bottom = _bottom Me.Left = _left End Sub
Public Function InRect(rowIndex As Integer, colIndex As Integer) As Boolean
If rowIndex >= Me.Top And rowIndex <= Me.Bottom And colIndex >= Me.Left And colIndex <= Me.Right Then
Return True Else
Return False End If End Function End Class
'*********************************************************************** '#End CmbDatagridbiew
'***********************************************************************
作者:西门吹雪
玉树临风工作室荣誉出品
正在阅读:
农民工、农民工工资管理制度03-16
英语四级考试历年词汇真题大汇集06-10
小学三年级语文阅读理解练习题07-20
平淡中见亲切_读_张爱玲散文_.pdf05-16
河道景观监理大纲12-01
学生信息管理系统05-25
100个句子帮你背出7000个单词03-08
第九讲 百分数应用题05-30
拒绝自己10-08
- 发电电气运行规程1
- 英文简历
- 最全辅导员招聘考试题库
- 4.3崇明岛的未来的样子
- 2012年上海市普通高校招生二本批次各校投档分数线
- 江苏省如皋中学2017-2018学年第一学期高三第二次阶段测试12月数
- 农业转移人口社会参与机制浅谈
- 2017-2018学年度牛津译林版8B英语初二期中试卷及答案
- 家长委员会上的讲话
- 05继电保护设备检修规程
- 组织行为学考试重点(陈春花)
- 2016年云南省公务员考试《行测》模拟试卷(十七)
- 规避“10号文”红筹系列之案例分析
- 钱寨小学学生读书活动评价方案
- 五大联赛派系
- 国际结算课件新
- 材料科学导论 - 图文
- 领导干部任前廉政法规考试模拟试题
- 汽车综合实训
- 医疗质量管理目录
- DataGridView
- 合并
- 单元
- 实现
- 违规违纪行为调查处理流程
- 长政发3号文(长沙城规补充规定)
- 融资融券试题1
- 静态时序分析(Static Timing Analysis)基础及应用
- 职业健康安全教育管理制度-2012220
- 加工贸易违规操作实例
- 堆石坝填筑施工方案 - 图文
- 我所理解的中国古代教育 - 真正的教育
- 电池后盖注塑模具设计-毕业设计说明书
- 汇编语言部分指令集
- 云南省绿色施工示范工程评审办法
- 地图学名词解释
- 上海七年级第二学期数学期末数学考试试卷(12)
- 教师的八个职业道德习惯
- 河南省陶瓷石材装修材料零售行业企业名录2018版1027家 - 图文
- 长沙市市政公用工程方案及初步设计审查要点(修订)
- 走近孤独孩子的内心
- 会计从业资格考试《财经法规》高频考点速记汇总 - 图文
- 网站安全及稳定性解决方案
- usrp介绍