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 セルの結合


コメント
セルの結合は、ネットでも情報が少なかったり、煩わしい手順で無理やり作られていたり――でしたので、ある意味で目から鱗でした。
同じ無理やり(失礼)ならば、「四角を書く!」という単純な方法の方がいいですね。
原始的だと言われそうですが、確かにサードパーティに手を出すよりは、そしてゴチャゴチャとしたソースコードになるよりは、といったところでしょうか。

> 微調整や自動で描画するテクニックはがんばって解決しましょう(結構面倒でした)。
Dim dRct As Rectangle = New Rectangle(0, DataGridView1.Height - 100, DataGridView1.Width, 100) '下にピタッと吸着
このようにサイズを指定するといい感じでしたので、参考までに。
  • kodeni
  • 2012/03/23 6:43 AM
kodeniさま コメントありがとうございます。

DataGridViewの結合は永遠の課題ですね。
データベース用のコントロールなので、今後も結合という機能はつきそうにありませんが・・・。


汎用で使えるようにするとどうしてもソースがぐちゃぐちゃになってしまいますね。
自分の実際のソースも汎用性を出すためにすごく複雑な処理となっています。


汎用性をともなわないなら、
原始的ですが、四角を描画するほうが、
シンプルかつ、メンテナンス性が良くなりますね。

どちらを取るかという感じでしょうか。
  • rockecco
  • 2012/03/23 12:51 PM
コメントする








    
この記事のトラックバックURL
トラックバック

calendar

S M T W T F S
1234567
891011121314
15161718192021
22232425262728
293031    
<< October 2017 >>

search this site.

よく使う、検索される投稿

categories

アマゾン

楽天

selected entries

archives

recent comment

recent trackback

profile


※当ブログはリンクフリーですが、 取材や雑誌等で掲載される場合は、事前にお知らせください

others

mobile

qrcode

powered

無料ブログ作成サービス JUGEM