DataGridView Tips集(ヘッダー関係の設定色々) (309) 玄関へお回り下さい。
 
1.DataGridView の列のヘッダーセルのキャプションテキスト(項目名)を取得・設定
     (1)各列のキャプションテキストを取得  (2).2列目のキャプションテキストを書き換え  (3)ワードラップモードの設定 
     (4)キャプションテキストを2段書き(複数行)で表示  

2.
DataGridView の列ヘッダーの表示スタイル設定色々

     (1)列ヘッダーの項目名を中央揃え・他に設定  (2)水平方向と垂直方向を中央に配置  (3)フォントスタイルを設定 
     (4)列ヘッダーの高さの設定をユーザーが変更出来るように設定  (5)列ヘッダーの高さを40ピクセルに設定

3.DataGridView の行ヘッダー及び列ヘッダーを非表示に設定 
     (1)行ヘッダーを非表示に設定  (2)列ヘッダーを非表示に設定 
4.DataGridView の行ヘッダーに行番号を描画する
5.
DataGridView の行のヘッダーセルのキャプションテキスト(項目名)を取得・設定
 
     (1)6行目のヘッダーセルに書き込み  (2)6行目のヘッダーセルの内容を取得 
6.DataGridView の行ヘッダーの表示スタイル設定色々
     (1)行ヘッダーの幅を設定  (2)水平方向は左端に垂直方向を中央に配置  (3)フォントスタイルを設定 
     (4)キャプションテキストを2段書き(複数行)で表示  (5)6行目のヘッダーセルの高さを設定 
7.行ヘッダー及び列ヘッダーのカラー設定色々
     (1)ヘッダーの visual スタイルを有効か無効に設定  (2)全ての列ヘッダーの(ForeColor)前景色を設定
     (3)全ての列ヘッダーの(BackColor)背景色を設定 (4)4列目のヘッダーの(ForeColor)前景色を設定 
     (5)4列目の列ヘッダーの(BackColor)背景色を設定 (6)全ての行ヘッダーの(BackColor)背景色を設定
     (7)全ての行ヘッダーの(ForeColor)前景色を設定 (8)全ての列ヘッダーの(BackColor)背景色を設定 
     (9)11行目の列ヘッダーの(BackColor)背景色を設定 (10)11行目のヘッダーの(ForeColor)前景色を設定 
8.DataGridView の左端上端のヘッダー(TopLeftHeader)に対する設定色々
     (1)現在のヘッダーの高さを取得  (2)ヘッダーセルにタイトルを書き込み  (3)列ヘッダーの高さを調整する方法を指定
     (4)ヘッダーの高さを設定  (5)ヘッダーの visual スタイルを無効に設定  (6)ヘッダーの(BackColor)背景色を設定
     (7)ヘッダーの(ForeColor)前景色を設定
9.DataGridView の左上端のヘッダーをクリックした時全て選択になるのを回避
10.
行ヘッダーのカレントセルを表す三角マークを非表示に設定する

11.
DataGridView の列ヘッダーのソートマークの三角を非表示に設定する

12.
DataGridView の列ヘッダーセルをクリックした場合のエラーを回避する

13.

開発環境 WindowsVista VB2010(VS2010 Pro) Framework 4 / ターゲットCPU:X86
[Option Compare Text] [Option Explicit On] [Option Infer On] [Option Strict On]で設定
その他条件 使用データ(dgvdat1.csv)は、次よりダウンロードして使って下さい。      dgvdat309.zip
データファイルは、プログラムの起動フォルダーに入れておいてください。
DataGridViewに表示(その1) で、データを表示した状態で実施してください。
下記サンプルコードと同等のイベントで実施してください。 
1.DataGridView の列のヘッダーセルのキャプションテキスト(項目名)を取得・設定

Private Sub Button11_Click(ByVal sender As System.Object, _
                           
ByVal e As System.EventArgs) Handles Button11.Click
'列のヘッダーセルのキャプションテキストを取得・設定
   
For i As Integer = 0 To DataGridView1.Columns.Count - 1
      '(1)各列のキャプションテキストを取得
      Debug.WriteLine(DataGridView1.Columns.Item(i).HeaderText)
   
Next i
'(2)2列目のキャプションテキストを書き換え
   DataGridView1.Columns.Item(1).HeaderText = 
"あいうえお"
'(3)(4)キャプションテキストを2段書き(複数行)で表示
   DataGridView1.ColumnHeadersDefaultCellStyle.WrapMode = DataGridViewTriState.True
   DataGridView1.Columns.Item(2).HeaderText = 
"かきくけこ" & Constants.vbCrLf & "さしすせそ"
End Sub

2.DataGridView の列ヘッダーの表示スタイル設定色々

Private Sub Button12_Click(ByVal sender As System.Object, _
                           
ByVal e As System.EventArgs) Handles Button12.Click
'(1)列ヘッダーの項目名を中央揃え・他に設定
   DataGridView1.ColumnHeadersDefaultCellStyle.Alignment = _
                              DataGridViewContentAlignment.MiddleCenter
'列ヘッダーのスタイル(フォント・配置)を設定
   
Dim columnHeaderStyle As DataGridViewCellStyle = DataGridView1.ColumnHeadersDefaultCellStyle
   '※ Dim columnHeaderStyle As New DataGridViewCellStyle にすると現在の設定値が初期化されてしまう 
'(2)水平方向と垂直方向を中央に配置
   columnHeaderStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
'(3)フォントスタイルを設定
   columnHeaderStyle.Font = 
New Font("MS 明朝", 12, FontStyle.Bold)
 'キャプションテキストを2段書き(複数行)で表示
'   columnHeaderStyle.WrapMode = DataGridViewTriState.True
   DataGridView1.ColumnHeadersDefaultCellStyle = columnHeaderStyle
'ヘッダーの高さを設定
   '(4)列ヘッダーの高さの設定をユーザーが変更出来るように設定(でないと高さの設定ができない)
   DataGridView1.ColumnHeadersHeightSizeMode = _
                              DataGridViewColumnHeadersHeightSizeMode.DisableResizing
'(5)列ヘッダーの高さを40ピクセルに設定(既定値は 23 ピクセルです)
   DataGridView1.ColumnHeadersHeight = 40
End Sub

3.DataGridView の行ヘッダー及び列ヘッダーを非表示に設定

Private Sub Button13_Click(ByVal sender As System.Object, _
                           
ByVal e As System.EventArgs) Handles Button13.Click
'(1)行ヘッダーを非表示に設定
   DataGridView1.RowHeadersVisible = 
False
'   DataGridView1.RowHeadersVisible = (Not DataGridView1.RowHeadersVisible)
'(2)列ヘッダーを非表示に設定
   DataGridView1.ColumnHeadersVisible = 
False
'   DataGridView1.ColumnHeadersVisible = Not DataGridView1.ColumnHeadersVisible
End Sub

4.DataGridView の行ヘッダーに行番号を描画する

Private Sub DataGridView1_RowPostPaint(ByVal sender As Object, _
                       
ByVal e As System.Windows.Forms.DataGridViewRowPostPaintEventArgs _
                                                         ) 
Handles DataGridView1.RowPostPaint
'行ヘッダーに行番号を描画する
   '描画位置の設定
   
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 Sub

5.DataGridView の行のヘッダーセルのキャプションテキスト(項目名)を取得・設定

Private Sub Button15_Click(ByVal sender As System.Object, _
                           
ByVal e As System.EventArgs) Handles Button15.Click
  '(1)6行目のヘッダーセルのキャプションテキストを設定
   DataGridView1.Rows(5).HeaderCell.Value = 
"6行目"
  '(2)6行目のヘッダーセルのキャプションテキストを取得
   Debug.WriteLine(DataGridView1.Rows(5).HeaderCell.Value)
End Sub

6.DataGridView の行ヘッダーの表示スタイル設定色々

Private Sub Button16_Click(ByVal sender As System.Object, _
                           
ByVal e As System.EventArgs) Handles Button16.Click
   DataGridView1.RowHeadersWidth = 150             
'(1)行ヘッダーの幅を設定
   
Dim rowHeaderStyle As DataGridViewCellStyle = DataGridView1.RowHeadersDefaultCellStyle
   '※ Dim columnHeaderStyle As New DataGridViewCellStyle にすると現在の設定値が初期化されてしまう 
'(2)水平方向は左端に垂直方向を中央に配置
   rowHeaderStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
'(3)フォントスタイルを設定
   rowHeaderStyle.Font = 
New Font("MS 明朝", 12, FontStyle.Bold)
'(4)キャプションテキストを2段書き(複数行)で表示
'   columnHeaderStyle.WrapMode = DataGridViewTriState.True
   DataGridView1.RowHeadersDefaultCellStyle = rowHeaderStyle
  '(5)6行目のヘッダーセルの高さを設定
   DataGridView1.Rows(5).Height = 40
End Sub

上記の以外は、[列ヘッダーの表示スタイル設定色々]も参考にしてください

7.DataGridView の行ヘッダー及び列ヘッダーのカラー設定色々

Private Sub Button17_Click(ByVal sender As System.Object, _
                           
ByVal e As System.EventArgs) Handles Button17.Click
'行及び列ヘッダーのカラー設定
   '※ visual スタイルを False に設定しておかないとカラー設定が有効にならない。
  '(1)ヘッダーの visual スタイルを有効か無効に設定(既定値は有効で true )

   DataGridView1.EnableHeadersVisualStyles = 
False
  '(2)全ての列ヘッダーの(ForeColor)前景色を設定
   DataGridView1.ColumnHeadersDefaultCellStyle.ForeColor = Color.Red
  '(3)全ての列ヘッダーの(BackColor)背景色を設定 
  DataGridView1.ColumnHeadersDefaultCellStyle.BackColor = Color.Cyan
  '(4)4列目のヘッダーの(ForeColor)前景色を設定 
   DataGridView1.Columns(3).HeaderCell.Style.ForeColor = Color.Yellow
  '(5)4列目の列ヘッダーの(BackColor)背景色を設定 
   DataGridView1.Columns(3).HeaderCell.Style.BackColor = Color.Red

  '(6)全ての行ヘッダーの(BackColor)背景色を設定 
   DataGridView1.RowHeadersDefaultCellStyle.BackColor = Color.LimeGreen
  '(7)全ての行ヘッダーの(ForeColor)前景色を設定 
   DataGridView1.RowHeadersDefaultCellStyle.ForeColor = Color.Red
  '(8)全ての列ヘッダーの(BackColor)背景色を設定 
   DataGridView1.Rows(10).HeaderCell.Value = 
"11行目"
  '(9)11行目の列ヘッダーの(BackColor)背景色を設定 
   DataGridView1.Rows(10).HeaderCell.Style.BackColor = Color.Red
  '(10)11行目のヘッダーの(ForeColor)前景色を設定 
   DataGridView1.Rows(10).HeaderCell.Style.ForeColor = Color.Yellow
End Sub

8.DataGridView の左端上端のヘッダー(TopLeftHeader)に対する設定色々

Private Sub Button18_Click(ByVal sender As System.Object, _
                           
ByVal e As System.EventArgs) Handles Button18.Click
  '(1)ヘッダーの高さが変更されるので、現在のヘッダーの高さを取得
   
Dim hh As Integer = DataGridView1.ColumnHeadersHeight
  '(2)ヘッダーセルにタイトルを書き込み
   DataGridView1.TopLeftHeaderCell.Value = 
"連番"

  '(3)ヘッダーの高さの設定をユーザーが出来るように設定(でないと高さの設定ができない)
   DataGridView1.ColumnHeadersHeightSizeMode = _
            DataGridViewColumnHeadersHeightSizeMode.DisableResizing
  '(4)ヘッダーの高さを設定
   DataGridView1.ColumnHeadersHeight = hh

  '(5)ヘッダーの visual スタイルが有効になっている場合は true。
  'True の場合は、下記 BackColor の設定が有効にならない。(既定値は、true)
   DataGridView1.EnableHeadersVisualStyles = 
False
 '(6)ヘッダーの(BackColor)背景色を設定 

   DataGridView1.TopLeftHeaderCell.Style.BackColor = Color.Green
 '(7)ヘッダーの(ForeColor)前景色を設定
   DataGridView1.TopLeftHeaderCell.Style.ForeColor = Color.Yellow
End Sub

9.DataGridView の左上端のヘッダーをクリックした時全て選択になるのを回避

Private Sub DataGridView1_CellMouseClick(ByVal sender As Object, _
     
ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) _
                    Handles
 DataGridView1.CellMouseClick
'左上端のヘッダーをクリックした時全て選択になるのを回避する
   Dim pos As System.Windows.Forms.DataGridView.HitTestInfo = DataGridView1.HitTest(e.X, e.Y)
   
If pos.ColumnIndex = -1 And pos.RowIndex = -1 Then
      DataGridView1.MultiSelect = 
False
   
End If
   
Else
      DataGridView1.MultiSelect = 
True
   
End If
End Sub

10.DataGridView の行ヘッダーのカレントセルを表す三角マークを非表示に設定する

   '下記の1行を初期表示前に設定してください。(Form1_Load イベントでも OK)
   DataGridView1.RowTemplate.HeaderCell = 
New dgvRowHeaderCell()

   'Defaultの状態に戻す場合(▼を表示)
   DataGridView1.RowTemplate.HeaderCell = 
Nothing


別途、下記をクラスを記入の事(Public Class Form1 内でも可)

'行ヘッダーのカレントセルを表す三角マークを非表示に設定する為のクラス。
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 IntegerByVal cellState As DataGridViewElementStates, _
   
ByVal value As ObjectByVal formattedValue As ObjectByVal 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

詳しくは、MSDN で、DataGridViewHeaderCell.Paint メソッド を参照願います。
 http://msdn.microsoft.com/ja-jp/library/system.windows.forms.datagridviewheadercell.paint.aspx

11.DataGridView の列ヘッダーのソートマークの三角を非表示に設定する

  'こちらは、表示後の設定となります。
  Button2.PerformClick()

    'ソートの三角マークを非表示にする為に、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


'列ヘッダーのソートマークの三角を非表示に設定する為のクラス。
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 IntegerByVal cellState As DataGridViewElementStates, _
   ByVal value As ObjectByVal formattedValue As ObjectByVal 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.DataGridView の行ヘッダーのカレントセルを表す三角マークを非表示に設定する] と同要領です。

12.DataGridView の列ヘッダーセルをクリックした場合のエラー回避

Private Sub DataGridView1_CellClick(ByVal sender As Object, _
     
ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
   'ヘッダーセルをクリックした場合は、無視する事によってエラーを回避(ソートは可能)
   
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
   'のようにして、セルのタイプを調べる事ができる

End If

 


2011/05/20


VBレスキュー(花ちゃん)
Visual Basic6.0  VB6.0
VB.NET2003/VB2005/VB2008/VB2010