掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
DataGridViewで複数行のセルを結合したい (ID:141701)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
こういう感じでよいのかな。 Public Class Form1 Private tbl As New DataTable() Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load tbl.Columns.Add("大分類", GetType(Integer)) tbl.Columns.Add("小分類", GetType(Integer)) tbl.Rows.Add(100, 1) tbl.Rows.Add(100, 2) tbl.Rows.Add(100, 3) tbl.Rows.Add(200, 10) tbl.Rows.Add(200, 15) tbl.Rows.Add(300, 100) tbl.Rows.Add(400, 1) tbl.Rows.Add(400, 2) tbl.Rows.Add(400, 3) DataGridView1.DataSource = tbl End Sub Private Sub DataGridView1_CellPainting(ByVal sender As Object, ByVal e As DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPainting e.Handled = False If e.ColumnIndex <> 0 OrElse e.RowIndex < 0 Then Return '[大分類]列でなければ何もしない ElseIf DataGridView1.Rows(e.RowIndex).IsNewRow Then Return '新規行の時も何もしない End If '現在行の大分類値 Dim C As Object = DataGridView1(0, e.RowIndex).Value '上の行の大分類値 Dim U As Object = Nothing If e.RowIndex > 0 Then U = DataGridView1(0, e.RowIndex - 1).Value End If '下の行の大分類値 Dim B As Object = Nothing If e.RowIndex < DataGridView1.Rows.Count - 1 Then B = DataGridView1(0, e.RowIndex + 1).Value End If '現在行=下の行なら、現在行の下枠線を消す If Integer.Equals(C, B) Then e.AdvancedBorderStyle.Bottom = DataGridViewAdvancedCellBorderStyle.None End If '現在行=上の行なら、現在行のテキストを消す If Integer.Equals(C, U) Then Dim selected As Boolean = CBool(e.State And DataGridViewElementStates.Selected) e.PaintBackground(e.CellBounds, selected) e.Handled = True End If End Sub Private Sub DataGridView1_CellValueChanged(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged If e.ColumnIndex = 0 OrElse e.RowIndex > 0 Then '大分類の値が変更された場合、上の行の大分類列を再描画して、 '枠線の表示/非表示が反映されるようにする DataGridView1.InvalidateCell(0, e.RowIndex - 1) End If End Sub End Class
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.