DataGridViewでヘッダーセルを結合するには?

解決


うい  2008-04-29 23:40:28  No: 139639

環境はVisual Studio 2005 WindowsXP です。

DataGridViewのヘッダーセルを隣のセルと結合させる方法を調べています。
デフォルトの機能にないそうなので、何か方法がないかと調べていると

過去のスレッド
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200705/07050028.txt

Windows フォームの DataGridView コントロールのセルの外観をカスタマイズする
http://msdn2.microsoft.com/ja-jp/library/hta8z9sz.aspx

「Windows フォームの DataGridView コントロールのセルの外観をカスタマイズする」にある方法で、描画領域の範囲を
Dim newRect As New Rectangle(e.CellBounds.X + 1,
            e.CellBounds.Y + 1, 
            e.CellBounds.Width /2  ←ここを変えてみました。
            , e.CellBounds.Height - 4)
ワイドを半分にすると、セル内の分割はいけそうなんですが、
×2で描画領域を倍にしても、
次の列に隠れて結合した見た目にはなりませんでした。

結合した見た目にするにはどうしたらいいのでしょうか。
よろしくお願いします。


魔界の仮面弁士  2008-04-30 00:12:14  No: 139640

隣り合う 2 つの列を結合しているかのように見せかけるなら、
左側セルの描画イベントでは、「左セルの左端から右セルの右端まで」
右側セルの描画イベントでは、「左セルの左端から右セルの右端まで」
を描画する事になります。

ところが、e.CellBounds が指すのは、セル一つの領域だけです。

左側セルなら、e.CellBounds.X + 1 からの開始でも良いですが、
右側セルなら、描画開始位置を、左セルの幅だけ減ずる必要がありますね。


うい  2008-04-30 03:31:58  No: 139641

左セル(列名Col1) 
newRect = New Rectangle(e.CellBounds.X + 1,
            e.CellBounds.Y + 1, 
            e.CellBounds.Width * 2  
            , e.CellBounds.Height - 4)

右セル(列名Col2)
 newRect = New Rectangle(e.CellBounds.X + 1 - 100,  ←  ここを修正
            e.CellBounds.Y + 1, 
            e.CellBounds.Width * 2  
            , e.CellBounds.Height - 4)

右側セルの始点を左側セル分の長さを引くことで中央そろえになりました。
ありがとうございます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加