DataGridViewのセルの結合する方法
- 2009.10.01 Thursday
- 14:17
結論から言うとできません(たぶん)。
やっぱりお高いサードパーティ製のコントロールを使うことになります。
そんなもの買っていられないので、無理矢理やってみる方法が次です。
単純にいうと描画してくっつけたように見せかけるという感じ。
データグリッドのペイントイベントに次のように描画させます。
Private Sub DataGridView1_Paint1(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles DataGridView1.Paint
e.Graphics.FillRectangle(Brushes.Black, 1, 1, 100, 100)
End Sub
たとえば、セル内にテキストを書きたい場合は、
Dim bCell as Brush = Brushes.Blue
Dim bFont As Brush = Brushes.Yellow
Dim sFmt As New StringFormat
Dim dRct As Rectangle = New Rectangle(1, 1, 100, 100)
Dim dFont = New Font("MS UI Gothic", 9.0F, FontStyle.Regular, GraphicsUnit.Point)
'描画テキストの書式を設定 たとえば中々に配置
sFrm.LineAlignment = .LineAlignment 'センタリング
sFrm.Alignment = .Alignment ’センタリング
e.Graphics.FillRectangle(bCell , dRct) 'セル描画
e.Graphics.DrawString("test", dFont , bFont , dRct, sFmt) '文字
という感じでソースを書けば何となくそれっぽく見えます。
微調整や自動で描画するテクニックはがんばって解決しましょう(結構面倒でした)。
VB2008のソースです。
※OSの種類や表示方法(クラシックモードやテーマ変更)によりセルの位置がずれることがあります。
おすすめ記事
C# DataGridView セルの結合
やっぱりお高いサードパーティ製のコントロールを使うことになります。
そんなもの買っていられないので、無理矢理やってみる方法が次です。
単純にいうと描画してくっつけたように見せかけるという感じ。
データグリッドのペイントイベントに次のように描画させます。
Private Sub DataGridView1_Paint1(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles DataGridView1.Paint
e.Graphics.FillRectangle(Brushes.Black, 1, 1, 100, 100)
End Sub
たとえば、セル内にテキストを書きたい場合は、
Dim bCell as Brush = Brushes.Blue
Dim bFont As Brush = Brushes.Yellow
Dim sFmt As New StringFormat
Dim dRct As Rectangle = New Rectangle(1, 1, 100, 100)
Dim dFont = New Font("MS UI Gothic", 9.0F, FontStyle.Regular, GraphicsUnit.Point)
'描画テキストの書式を設定 たとえば中々に配置
sFrm.LineAlignment = .LineAlignment 'センタリング
sFrm.Alignment = .Alignment ’センタリング
e.Graphics.FillRectangle(bCell , dRct) 'セル描画
e.Graphics.DrawString("test", dFont , bFont , dRct, sFmt) '文字
という感じでソースを書けば何となくそれっぽく見えます。
微調整や自動で描画するテクニックはがんばって解決しましょう(結構面倒でした)。
VB2008のソースです。
※OSの種類や表示方法(クラシックモードやテーマ変更)によりセルの位置がずれることがあります。
おすすめ記事
C# DataGridView セルの結合
同じ無理やり(失礼)ならば、「四角を書く!」という単純な方法の方がいいですね。
原始的だと言われそうですが、確かにサードパーティに手を出すよりは、そしてゴチャゴチャとしたソースコードになるよりは、といったところでしょうか。
> 微調整や自動で描画するテクニックはがんばって解決しましょう(結構面倒でした)。
Dim dRct As Rectangle = New Rectangle(0, DataGridView1.Height - 100, DataGridView1.Width, 100) '下にピタッと吸着
このようにサイズを指定するといい感じでしたので、参考までに。
DataGridViewの結合は永遠の課題ですね。
データベース用のコントロールなので、今後も結合という機能はつきそうにありませんが・・・。
汎用で使えるようにするとどうしてもソースがぐちゃぐちゃになってしまいますね。
自分の実際のソースも汎用性を出すためにすごく複雑な処理となっています。
汎用性をともなわないなら、
原始的ですが、四角を描画するほうが、
シンプルかつ、メンテナンス性が良くなりますね。
どちらを取るかという感じでしょうか。