Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
DataGridView1.AutoGenerateColumns = False
End Sub
在DataGridView的CellPainting事件中,我们放置以下内容:
Private Sub DataGridView1_CellPainting(sender As Object, e As DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPainting
e.AdvancedBorderStyle.Bottom = DataGridViewAdvancedCellBorderStyle.None
If (e.RowIndex < 1 Or e.ColumnIndex < 0) Then
Return
End If
If (IsTheSameCellValue(e.ColumnIndex, e.RowIndex)) Then
e.AdvancedBorderStyle.Top = DataGridViewAdvancedCellBorderStyle.None
Else
e.AdvancedBorderStyle.Top = DataGridView1.AdvancedCellBorderStyle.Top
End If
End Sub
在DataGridView的CellFormatting事件中,我们放置以下内容:
Private Sub DataGridView1_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
If (e.RowIndex = 0) Then
Return
End If
If (IsTheSameCellValue(e.ColumnIndex, e.RowIndex)) Then
e.Value = ""
e.FormattingApplied = True
End If
End Sub
另外我们需要创建一个函数:
Private Function IsTheSameCellValue(ByVal column As Integer, ByVal row As Integer) As Boolean
Dim cell1 As DataGridViewCell = DataGridView1(column, row)
Dim cell2 As DataGridViewCell = DataGridView1(column, row - 1)
If (IsDBNull(cell1.Value) Or IsDBNull(cell2.Value)) Then
Return False
End If
If (cell1.Value = cell2.Value) Then
Return True
Else
Return False
End If
End Function
DataGridView 不提供此功能。
在 CodeProject 中,如果您可以找到允许执行此操作的 DataGridView 的列类型的实现:
具有跨度行为的 DataGridVewTextBoxCell
它基本上创建了一个列类型 DataGridViewTextBoxColumnEx,其单元格的类型为 DataGridViewTextBoxCellEx。这些单元格允许您通过它们的 RowSpan 和 ColSpan 属性组合单元格。
使用示例:
结果:
要使用它:
你可以选择一个选项,比如
如何在 Winforms 中合并 DataGridView 单元格
在
CellPainting
DataGridView的情况下在那里它验证列的值是否等于前一个单元格的值,如果是,它使用消除单元格的行
还有另一种更复杂的方式使用 GDI
在 DATAGRIDVIEW 中合并单元格
这是我的问题的完美解决方案,我分享给大家。
以下指令放置在Form的Load事件中:
在DataGridView的CellPainting事件中,我们放置以下内容:
在DataGridView的CellFormatting事件中,我们放置以下内容:
另外我们需要创建一个函数: