###前提・実現したいこと
表題の通りデータグリッドビューで複数行のヘッダを作成したいです。
(画像D,E,Fの箇所)
Gの箇所については、CellPaintingで動的に作成ができそうですが、ヘッダについては実装方法がイメージできません。
なにかご助言いただけないでしょうか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
D,E,Fの箇所も、Gと同様に CellPainting で自前描画すれば対応可能です。
ざっくり下記のような感じでしょうか。
csharp
1private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) 2{ 3 // D,E,Fの箇所だけ自前描画する 4 if (e.RowIndex == -1 && e.ColumnIndex == 3) 5 { 6 // 自前で描画したいので、既存の描画は無効化する 7 e.Paint(e.CellBounds, DataGridViewPaintParts.None); 8 e.Handled = true; 9 10 // 描画すべき領域の取得 11 var rect = dataGridView1.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, true); 12 rect.Width -= 1; 13 rect.Height -= 1; 14 // 背景塗りつぶし 15 e.Graphics.FillRectangle(new SolidBrush(SystemColors.Control), rect); 16 // 外枠を描画する 17 e.Graphics.DrawRectangle(new Pen(SystemColors.ControlDark), rect); 18 var separatedHeight = rect.Height / 3; 19 // 文字と分割線を描画する 20 var headerTexts = new string[] { @"D", @"E", @"F" }; 21 for (var i = 0; i < 3; i++) 22 { 23 e.Graphics.DrawLine( 24 new Pen(SystemColors.ControlDark), 25 rect.Left, 26 rect.Top + separatedHeight * i, 27 rect.Right, 28 rect.Top + separatedHeight * i); 29 var separatedRect = new Rectangle(rect.X, rect.Y + separatedHeight * i, rect.Width, separatedHeight); 30 TextRenderer.DrawText( 31 e.Graphics, 32 headerTexts[i], 33 dataGridView1.ColumnHeadersDefaultCellStyle.Font, 34 separatedRect, 35 SystemColors.ControlText, 36 TextFormatFlags.VerticalCenter | TextFormatFlags.HorizontalCenter | TextFormatFlags.EndEllipsis); 37 } 38 } 39}
投稿2015/12/18 04:15
総合スコア2019
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/12/18 06:26