以前DataGridView でセルが1つ上の行と同じ場合まとめる方法で質問した者です。
たとえば
氏名,区分,所有資格 というデータがあって
1行目 山田太郎,A,技術士
2行目 山田太郎,A,会計士
3行目 田中二郎,A,建築士
4行目 石川五右衛門,B,看護士
のようなデータがあった場合、2列目の「区分」を1行目と2行目はまとめたいのですが、2行目と3行目は氏名が違うのでまとめたくない場合、
どうすればよいでしょうか?
こちらのサイトを参考に単純に現在行と次の行が同じ場合まとめる事はできています。
http://www.atmarkit.co.jp/fdotnet/dotnettips/593dgvgroupedcell/dgvgroupedcell.html
> 以前DataGridView でセルが1つ上の行と同じ場合まとめる方法で質問した者です。
以前の投稿へのリンクを貼っていただけないでしょうか。
> 2列目の「区分」を1行目と2行目はまとめたいのですが、
> 2行目と3行目は氏名が違うのでまとめたくない場合、
> どうすればよいでしょうか?
現時点で、具体的にどのようなコードを書いているのかは分かりませんが、
少なくとも標準機能には、「まとめる」機能は無いわけですよね。
そこに、前後の行の値を比較することで、同じ値をまとめて表示するよう
コードを付け加えたのでしょうから、その処理を見直して、名前列の値が
異なっているかどうかを判断し、まとめ方を変えてやれば良いかと。
以前のリンクです
http://madia.world.coocan.jp/cgi-bin/vbnet/wwwlng.cgi?print+201206/12060015.txt
DataGridview の CellPeinting イベント時に以下のソースを記述
しています。
'現在行の大分類値
Dim C As Object = DataGridView1(0, e.RowIndex).Value
If e.ColumnIndex = 0 Then
C = DataGridView1(0, e.RowIndex).Value
End if
'上の行の大分類値
Dim U As Object = Nothing
If e.RowIndex > 0 Then
If e.ColumnIndex = 0 Then
U = DataGridView1(0, e.RowIndex - 1).Value
End If
End If
'下の行の大分類値
Dim B As Object = Nothing
If e.RowIndex < DataGridView1.Rows.Count - 1 Then
If e.ColumnIndex = 4 Then
B = DataGridView1(4, e.RowIndex + 1).Value
End If
End If
'現在行=下の行なら、現在行の下枠線を消す
If Integer.Equals(C, B) Then
e.AdvancedBorderStyle.Bottom=
DataGridViewAdvancedCellBorderStyle.None
End IF
'一番上の行は常に表示する
If DataGridView1.FirstDisplayedScrollingRowIndex = e.RowIndex Then
Return
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
以前のリンクです
http://madia.world.coocan.jp/cgi-bin/vbnet/wwwlng.cgi?print+201206/12060015.txt
DataGridview の CellPeinting イベント時に以下のソースを記述
しています。
'現在行の大分類値
Dim C As Object = DataGridView1(0, e.RowIndex).Value
If e.ColumnIndex = 0 Then
C = DataGridView1(0, e.RowIndex).Value
End if
'上の行の大分類値
Dim U As Object = Nothing
If e.RowIndex > 0 Then
If e.ColumnIndex = 0 Then
U = DataGridView1(0, e.RowIndex - 1).Value
End If
End If
'下の行の大分類値
Dim B As Object = Nothing
If e.RowIndex < DataGridView1.Rows.Count - 1 Then
If e.ColumnIndex = 4 Then
B = DataGridView1(4, e.RowIndex + 1).Value
End If
End If
'現在行=下の行なら、現在行の下枠線を消す
If Integer.Equals(C, B) Then
e.AdvancedBorderStyle.Bottom=
DataGridViewAdvancedCellBorderStyle.None
End IF
'一番上の行は常に表示する
If DataGridView1.FirstDisplayedScrollingRowIndex = e.RowIndex Then
Return
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
記載したコードを解析し、一応自己解決しました。
ありがとうございました。
ツイート | ![]() |