画面イメージ
セルの値が連続する場合、下の罫線を消し、文字色を白にする
VB
Private Sub DataGridView1_CellPainting(sender As Object, e As DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPainting
'CustomerIDの列番号
Dim CoustomerIDCol = DataGridView1.Columns("CustomerID").Index
'最終行を超える場合、スキップ
If e.RowIndex + 1 >= G_dtOrder.Rows.Count Then Return
'CustomerID列以外の場合、スキップ
If e.ColumnIndex <> CoustomerIDCol Then Return
'1つ下の値
Dim NextVal = DataGridView1.Rows(e.RowIndex + 1).Cells(CoustomerIDCol).Value
'1つ下の値と同じ値の場合、下の罫線を消す
If NextVal = e.Value Then
e.AdvancedBorderStyle.Bottom = DataGridViewAdvancedCellBorderStyle.None
DataGridView1.Rows(e.RowIndex + 1).Cells(CoustomerIDCol).Style.ForeColor = Color.White
End If
End Sub
動作確認用コード
VB
Public G_dtOrder As New DataTable
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
With G_dtOrder
.Columns.Add("CustomerID", GetType(String))
.Columns.Add("ProductName", GetType(String))
.Columns.Add("Count", GetType(String))
.Rows.Add("C1", "にんじん", "10")
.Rows.Add("C1", "きゅうり", "10")
.Rows.Add("C1", "たまねぎ", "10")
.Rows.Add("C2", "きゃべつ", "20")
.Rows.Add("C2", "きゅうり", "30")
.Rows.Add("C3", "たまねぎ", "40")
End With
With DataGridView1
.DataSource = G_dtOrder
.AllowUserToAddRows = False
End With
End Sub
上の罫線ではなく、下の罫線を消している理由
- 下記コードを実行すれば分かる通り、デフォルト設定が以下のようになっている
ヘッダ以外のTopは元々Noneであるため、TopをNoneにしても罫線が消えない- 列ヘッダ(Top):6(OutsetDouble)
- 列ヘッダ(Bottom):5(Outset)
- ヘッダ以外(Top):1(None)
- ヘッダ以外(Bottom):2(Single)
VB
Private Sub DataGridView1_CellPainting(sender As Object, e As DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPainting
If e.ColumnIndex < 0 Then Return
Debug.WriteLine(e.RowIndex & " " & e.ColumnIndex & " " & e.AdvancedBorderStyle.Top)
Debug.WriteLine(e.RowIndex & " " & e.ColumnIndex & " " & e.AdvancedBorderStyle.Bottom)
End Sub
DataGridViewAdvancedCellBorderStyleの列挙体
名称 | 値 | 説明 |
---|---|---|
NotSet | 0 | 未設定 |
None | 1 | 境界線なし |
Single | 2 | 一重の境界線 |
Inset | 3 | 一重のくぼんだ境界線 |
InsetDouble | 4 | 二重のくぼんだ境界線 |
Outset | 5 | 一重の盛り上がった境界線 |
OutsetDouble | 6 | 二重の盛り上がった境界線 |
OutsetPartial | 7 | 盛り上がった部分を含む一重の境界線 |
コメント