2.DataGridView でのヘッダー関係の設定色々(18_DGV_02) (旧、SampleNo.309) |
下記プログラムコードに関する補足・注意事項 動作確認:Windows 8.1 (Windows 7) / VB2013 (VB2010) / Framework 4.5.1 / 対象の CPU:x86 Option :[Compare Text] [Explicit On] [Infer On] [Strict On] Imports :追加なし 参照設定:WaitTime.dll 参照設定方法参照 その他 :使用データは、次よりダウンロードして使って下さい。 dgvdat.zip :このサンプルを使用される前に、左のメニューのDataGridViewでのデータの読込保存関係をご覧になって下さい。 このサンプル等の内容を無断で転載、掲載、配布する事はお断りします。(私の修正・改訂・削除等が及ばなくなるので) 必要ならリンクをはるようにして下さい。(引用の場合は引用元のリンクを明記して下さい) |
1.列のヘッダーセルのキャプションテキストを取得・設定 |
すでに、CSV ファイルを ADO.NET を使って DataGridView に読み込み表示されているものとします。 Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click '01.列のヘッダーセルのキャプションテキストを取得・設定 Button1.PerformClick() For i As Integer = 0 To DataGridView1.Columns.Count - 1 '各列のキャプションテキストを取得 Debug.WriteLine(DataGridView1.Columns.Item(i).HeaderText) Next i '2列目のキャプションテキストを書き換え DataGridView1.Columns.Item(1).HeaderText = "あいうえお" 'キャプションテキストを2段書きで表示 DataGridView1.ColumnHeadersDefaultCellStyle.WrapMode = DataGridViewTriState.True DataGridView1.Columns.Item(2).HeaderText = "かきくけこ" & Constants.vbCrLf & "さしすせそ" End Sub |
2.列ヘッダーの表示スタイル設定色々 |
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click '02.列ヘッダーの表示スタイル設定色々 Button1.PerformClick() '列ヘッダーの項目名を中央揃え・他に設定 DataGridView1.ColumnHeadersDefaultCellStyle.Alignment = _ DataGridViewContentAlignment.MiddleCenter wt.WaitTime(1000) '列ヘッダーのスタイル(フォント・配置)を設定 Dim columnHeaderStyle As DataGridViewCellStyle = DataGridView1.ColumnHeadersDefaultCellStyle '※ Dim columnHeaderStyle As New DataGridViewCellStyle にすると現在の設定値が初期化されてしまう '水平方向と垂直方向を中央に配置 columnHeaderStyle.Alignment = DataGridViewContentAlignment.MiddleLeft wt.WaitTime(1000) 'フォントスタイルを設定 columnHeaderStyle.Font = New Font("MS 明朝", 12, FontStyle.Bold) ' columnHeaderStyle.WrapMode = DataGridViewTriState.True DataGridView1.ColumnHeadersDefaultCellStyle = columnHeaderStyle wt.WaitTime(1000) 'ヘッダーの高さを設定 '列ヘッダーの高さの設定をユーザーが出来るように設定(でないと高さの設定ができない) DataGridView1.ColumnHeadersHeightSizeMode = _ DataGridViewColumnHeadersHeightSizeMode.DisableResizing '列ヘッダーの高さを40ピクセル設定(既定値は 23 ピクセルです) DataGridView1.ColumnHeadersHeight = 40 End Sub |
3.行ヘッダー及び列ヘッダーを非表示に設定 |
Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click '03.行ヘッダー及び列ヘッダーを非表示に設定 Button1.PerformClick() '行ヘッダーを非表示に設定 'DataGridView1.RowHeadersVisible = False DataGridView1.RowHeadersVisible = (Not DataGridView1.RowHeadersVisible) wt.WaitTime(1000) '列ヘッダーを非表示に設定 'DataGridView1.ColumnHeadersVisible = False DataGridView1.ColumnHeadersVisible = Not DataGridView1.ColumnHeadersVisible End Sub |
4.行ヘッダーに行番号を描画する |
Private frg06 As Boolean Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click '04.行ヘッダーに行番号を描画する '行ヘッダーに行番号を描画する frg06 = Not frg06 Button1.PerformClick() End Sub Private Sub DataGridView1_RowPostPaint(sender As Object, e As DataGridViewRowPostPaintEventArgs) Handles DataGridView1.RowPostPaint '行ヘッダーに行番号を描画する If frg06 Then '描画位置の設定 Dim flgStyle As TextFormatFlags = TextFormatFlags.VerticalCenter Or TextFormatFlags.Right '描画範囲 Dim rect As New Rectangle(e.RowBounds.Location.X, e.RowBounds.Location.Y, _ DataGridView1.RowHeadersWidth - 4, e.RowBounds.Height) '行番号の生成及び描画 TextRenderer.DrawText(e.Graphics, (e.RowIndex + 1).ToString(), e.InheritedRowStyle.Font, _ rect, e.InheritedRowStyle.ForeColor, flgStyle) End If End Sub |
5.行のヘッダーセルのキャプションテキストを取得・設定 |
Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click '05.行のヘッダーセルのキャプションテキストを取得・設定 Button1.PerformClick() DataGridView1.Rows(5).HeaderCell.Value = "6行目" Debug.WriteLine(DataGridView1.Rows(5).HeaderCell.Value) '結果 6行目 End Sub |
6.行ヘッダーの表示スタイル設定色々 |
Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click '06.行ヘッダーの表示スタイル設定色々 Button7.PerformClick() DataGridView1.Rows(5).HeaderCell.Value = "6行目行ヘッダーに書き込み" '行ヘッダーの幅を150 ピクセルに設定 DataGridView1.RowHeadersWidth = 150 wt.WaitTime(1000) '各セルに適用される書式指定情報およびスタイル情報を表す Dim rowHeaderStyle As DataGridViewCellStyle = DataGridView1.RowHeadersDefaultCellStyle '※ Dim columnHeaderStyle As New DataGridViewCellStyle にすると現在の設定値が初期化されてしまう '水平方向は左端に垂直方向を中央に配置 rowHeaderStyle.Alignment = DataGridViewContentAlignment.MiddleLeft wt.WaitTime(1000) 'フォントスタイルを設定 rowHeaderStyle.Font = New Font("MS 明朝", 12, FontStyle.Bold) 'キャプションテキストを2段書き(複数行)で表示 Debug.Print(rowHeaderStyle.WrapMode.ToString) 'Default = True のようなので rowHeaderStyle.WrapMode = DataGridViewTriState.False DataGridView1.RowHeadersDefaultCellStyle = rowHeaderStyle wt.WaitTime(1000) '6行目のヘッダーセルの高さを設定 DataGridView1.Rows(5).Height = 40 '上記の以外は、列ヘッダーの表示スタイル設定色々も参考にしてください End Sub |
7.行及び列ヘッダーのカラー設定 |
Private Sub Button9_Click(sender As Object, e As EventArgs) Handles Button9.Click '07.行及び列ヘッダーのカラー設定 Button1.PerformClick() '※ visual スタイルを False に設定しておかないとカラー設定が有効にならない。 'ヘッダーの visual スタイルを有効か無効に設定(既定値は有効で true ) DataGridView1.EnableHeadersVisualStyles = False DataGridView1.ColumnHeadersDefaultCellStyle.ForeColor = Color.Red DataGridView1.ColumnHeadersDefaultCellStyle.BackColor = Color.Cyan DataGridView1.Columns(3).HeaderCell.Style.ForeColor = Color.Yellow DataGridView1.Columns(3).HeaderCell.Style.BackColor = Color.Red DataGridView1.RowHeadersDefaultCellStyle.BackColor = Color.LimeGreen DataGridView1.RowHeadersDefaultCellStyle.ForeColor = Color.Red DataGridView1.Rows(10).HeaderCell.Value = "11行目" DataGridView1.Rows(10).HeaderCell.Style.BackColor = Color.Red DataGridView1.Rows(10).HeaderCell.Style.ForeColor = Color.Yellow End Sub |
8.左端上端のヘッダーに対する設定 |
Private Sub Button10_Click(sender As Object, e As EventArgs) Handles Button10.Click '08.左端上端のヘッダーに対する設定 Button1.PerformClick() '左上端のセルに記入 'ヘッダーの高さが変更されるので、現在のヘッダーの高さを取得 Dim hh As Integer = DataGridView1.ColumnHeadersHeight DataGridView1.TopLeftHeaderCell.Value = "連番" 'ヘッダーの高さの設定をユーザーが出来るように設定(でないと高さの設定ができない) DataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing DataGridView1.ColumnHeadersHeight = hh '左上端のセルのバックカラーを変更 'ヘッダーの visual スタイルが有効になっている場合は true。 'True の場合は、下記 BackColor の設定が有効にならない。(既定値は、true) DataGridView1.EnableHeadersVisualStyles = False DataGridView1.TopLeftHeaderCell.Style.BackColor = Color.Green DataGridView1.TopLeftHeaderCell.Style.ForeColor = Color.Yellow End Sub |
9.行ヘッダーのカレントセルを表す三角マークを非表示に設定 |
Private Sub Button11_Click(sender As Object, e As EventArgs) Handles Button11.Click '09.行ヘッダーのカレントセルを表す三角マークを非表示に設定 '下記1行は初期表示前に設定してください。 DataGridView1.RowTemplate.HeaderCell = New dgvRowHeaderCell Button1.PerformClick() '元に戻す場合 'DataGridView1.RowTemplate.HeaderCell = New DataGridViewRowHeaderCell End Sub '行ヘッダーのカレントセルを表す三角マークを非表示に設定する為のクラス。 Public Class dgvRowHeaderCell 'DataGridViewRowHeaderCell を継承 Inherits DataGridViewRowHeaderCell 'DataGridViewHeaderCell.Paint をオーバーライドして行ヘッダーを描画 Protected Overrides Sub Paint(ByVal graphics As Graphics, ByVal clipBounds As Rectangle, _ ByVal cellBounds As Rectangle, ByVal rowIndex As Integer, ByVal cellState As DataGridViewElementStates, _ ByVal value As Object, ByVal formattedValue As Object, ByVal errorText As String, _ ByVal cellStyle As DataGridViewCellStyle, ByVal advancedBorderStyle As DataGridViewAdvancedBorderStyle, _ ByVal paintParts As DataGridViewPaintParts) '標準セルの描画からセル内容の背景だけ除いた物を描画(-5) MyBase.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value, _ formattedValue, errorText, cellStyle, advancedBorderStyle, _ Not DataGridViewPaintParts.ContentBackground) End Sub End Class |
10.列ヘッダーのソートの三角マークを非表示に設定 |
Private Sub Button12_Click(sender As Object, e As EventArgs) Handles Button12.Click '10.列ヘッダーのソートの三角マークを非表示に設定 Button1.PerformClick() ' DataGridViewRow を作成して初期化(行ヘッダーの三角を非表示に設定) '通常は、下記の3行だけを初期表示後に設定してください。 'ソートの三角マークを非表示にする為に、DataGridViewHeaderCell を描画 For i As Integer = 0 To DataGridView1.ColumnCount - 1 DataGridView1.Columns(i).HeaderCell = New dgvColumnHeaderCell() Next i 'Defaultの状態に戻す(▼を表示) 'For i As Integer = 0 To DataGridView1.ColumnCount - 1 ' DataGridView1.Columns(i).HeaderCell = Nothing 'Next i End Sub '列ヘッダーにカレントセルを表す三角が表示されるのを非表示にする為のクラス。 Public Class dgvColumnHeaderCell Inherits DataGridViewColumnHeaderCell 'DataGridViewHeaderCell.Paint をオーバーライドして列ヘッダーを描画 Protected Overrides Sub Paint(ByVal graphics As Graphics, ByVal clipBounds As Rectangle, _ ByVal cellBounds As Rectangle, ByVal rowIndex As Integer, ByVal cellState As DataGridViewElementStates, _ ByVal value As Object, ByVal formattedValue As Object, ByVal errorText As String, _ ByVal cellStyle As DataGridViewCellStyle, ByVal advancedBorderStyle As DataGridViewAdvancedBorderStyle, _ ByVal paintParts As DataGridViewPaintParts) '標準セルの描画からセル内容の背景だけ除いた物を描画(-5) MyBase.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value, _ formattedValue, errorText, cellStyle, advancedBorderStyle, _ Not DataGridViewPaintParts.ContentBackground) End Sub End Class |
11.クリックした個所のセル情報取得時のヘッダーセルクリック時のエラー回避 |
Private frg13 As Boolean Private Sub Button13_Click(sender As Object, e As EventArgs) Handles Button13.Click '11.クリックした個所のセル情報取得時のヘッダーセルクリック時のエラー回避 Button1.PerformClick() frg13 = Not frg13 End Sub Private Sub DataGridView1_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellClick If frg13 Then 'ヘッダーセルをクリックした場合は、無視する事によってエラーを回避し、ソートを可能にする If e.RowIndex < 0 Or e.ColumnIndex < 0 Then Exit Sub MessageBox.Show(DataGridView1.Item(e.ColumnIndex, e.RowIndex).Value.ToString) '又は、MouseClick イベントでの場合は、 'Dim pos As DataGridView.HitTestInfo = DataGridView1.HitTest(e.X, e.Y) 'If pos.Type = DataGrid.HitTestType.Cell Then 'のようにして、セルのタイプを調べる事ができる Else Try MessageBox.Show(DataGridView1.Item(e.ColumnIndex, e.RowIndex).Value.ToString) Catch ex As Exception MessageBox.Show(ex.Message) End Try End If End Sub |
12. |
13. |
14. |
15. |
16. |
17. |
18. |
検索キーワード及びサンプルコードの別名(機能名) |
データグリッドビュー |