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
'***********************************************************************
作者:西门吹雪
玉树临风工作室荣誉出品
正在阅读:
“351高效探究课堂”教学模式简介05-18
1302(1)工作面井下远端漏电试验措施02-01
电大货币银行学期末考试复习题库资料12-02
看日主旺弱07-11
考试动员演讲稿01-08
第一至六章首页 Microsoft Word 文档03-19
快乐的中秋节作文700字07-12
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- DataGridView
- 合并
- 单元
- 实现
- 违规违纪行为调查处理流程
- 长政发3号文(长沙城规补充规定)
- 融资融券试题1
- 静态时序分析(Static Timing Analysis)基础及应用
- 职业健康安全教育管理制度-2012220
- 加工贸易违规操作实例
- 堆石坝填筑施工方案 - 图文
- 我所理解的中国古代教育 - 真正的教育
- 电池后盖注塑模具设计-毕业设计说明书
- 汇编语言部分指令集
- 云南省绿色施工示范工程评审办法
- 地图学名词解释
- 上海七年级第二学期数学期末数学考试试卷(12)
- 教师的八个职业道德习惯
- 河南省陶瓷石材装修材料零售行业企业名录2018版1027家 - 图文
- 长沙市市政公用工程方案及初步设计审查要点(修订)
- 走近孤独孩子的内心
- 会计从业资格考试《财经法规》高频考点速记汇总 - 图文
- 网站安全及稳定性解决方案
- usrp介绍