DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DataGridViewのヘッダセルのマージ

環境/言語:[C#]
分類:[.NET]

お世話になります。

DataGridViewのセルマージ機能について質問です。
2つの隣接するカラムヘッダセルをマージしたいんですが、
手法がわかりません。

ヘルプで参照しても『PowerTools FlexGrid for .NET』
のセルマージ機能が紹介されているだけみたいです。
確かに、ヘルプの通りGrapeCityのFlexGridでは出来るんですが、
ライセンスの問題もあり、
FlexGridの使用を避けたいのでDataGridViewを使用したいです。
(当然ですが、ライセンスを持たないPCではコンパイルできない)

やはりDataGridViewではヘッダセルのマージは出来ないんでしょうか?
以上、宜しくお願い致します。
残念ながらDataGridViewにはそのような機能がありません。要望は出ているのですが...。

フィードバック: DataGridView: support multi-row headers and cell-spanning
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=115256

どうしても何とかしたいということであれば、ヘッダを自分で描画するという方法があります。また、DataGridViewのヘッダの上部にラベルやボタンのようなコントロールを置いてごまかすという方法も考えられます。
返答ありがとうございます。

> 残念ながらDataGridViewにはそのような機能がありません。要望は出ているのですが...。

やっぱり無いんですね。

> どうしても何とかしたいということであれば、ヘッダを自分で描画するという方法があります。

C#をはじめたばっかりで、何をすれば良いのか、さっぱりわからないです。

> また、DataGridViewのヘッダの上部にラベルやボタンのようなコントロールを置いてごまかすという方法も考えられます。

質問する前に試してみました。
起動時など、DataGridView左上隅のセルが、完全に表示されている場合はうまくいくのですが、
スクロールバーを使用して、左上隅のセルが半分隠れる等、中途半端な表示をさせた場合には、左上隅のセルが隠れている分だけ表示位置が左にずれます。
失敗する理由ですが、
左上隅のセルが表示されていることはプロパティでわかります。
但し完全に表示されているかまではわからないからです。
VB6のFlexGridでは『CellTop/CellLeft』で容易に座標が拾えたんですが、
自分で調べた限りでは、DataGridViewに『CellTop/CellLeft』に相当するプロパティを見つけられませんでした。
>>どうしても何とかしたいということであれば、ヘッダを自分で描画するという方法があります。
>
> C#をはじめたばっかりで、何をすれば良いのか、さっぱりわからないです。

こちらで解説しています。

DataGridViewのセルを自分で描画する
http://dobon.net/vb/dotnet/datagridview/ownerdrawcell.html

> VB6のFlexGridでは『CellTop/CellLeft』で容易に座標が拾えたんですが、
> 自分で調べた限りでは、DataGridViewに『CellTop/CellLeft』に相当するプロパティを見つけられませんでした。

上記のURLで紹介しているCellPaintingイベントハンドラ内で、DataGridViewCellPaintingEventArgsオブジェクトのCellBoundsプロパティを使ってセルの位置と大きさを取得できます。CellPaintingイベントハンドラでヘッダにするコントロールの位置と大きさを変更すれば何とかなるのではないでしょうか。
ありがとうございます。
早速試してみます。
ご指導ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板