DataGridView Tips集(列に関する設定色々) (309) 玄関へお回り下さい。
 
1. DataGridView の指定の列目までをスクロールされないように設定
2. DataGridView の指定列を非表示に設定
3. DataGridView の指定列のセルに含まれるテキスト形式の内容を複数行で表示
4. DataGridView の指定列の表示スタイルを設定
 (1)指定列のフォントを設定  (2)指定列を日付の書式設定で表示  (3)指定列を3桁区切りスタイルで表示
 (4)指定列を縦方向上揃え、水平方向右揃えで表示  (5)下1桁で0揃え(小数点を表示する場合)
5. DataGridView の指定列を左端に表示する
6. DataGridView のセルの内容に合わせて全ての列の幅を自動調整
 (1)全ての列幅を文字列のサイズに合せる  (2)全ての列幅を指定のサイズ設定
7. DataGridView の指定の列に画像(イメージ、アイコン)を表示する
 (1)イメージ列を作成しアイコンを表示する  (2)セルにエラー画像?(四角に赤い×の画像)が表示されないようにする
 (3)セルの値により表示する画像を選択する
8. DataGridView でユーザーが列のサイズ変更をできないように設定
9. DataGridView の列のデータに合せてIMEのモードを設定する
 (1)指定の列が TextBox タイプかを調べる  (2)2列目の IME モードをひらがなに設定する
 (3) IME モード をOff に設定する
10. DataGridView のユーザーがマウスのドラッグで列の順序を変更できるように設定
11. DataGridView の指定の列を削除する
12. DataGridView の指定位置に列を挿入する
13. DataGridView の指定の列の幅を設定する
 (1)セルの内容に合わせて、指定された列の幅を自動調整  (2)指定の列の幅を設定する
 (3)全ての列に対して個別に設定する
14. DataGridView の指定の列を選択状態にする
 (1)SortMode の Automatic を Programmatic に変更する
 (2)列のヘッダーまたは列内のセルをクリックすることによって列全体が選択されるようにする
 (3)指定の列を全て選択状態にする  (4)選択されている列数を取得
15. DataGridView の指定の列を編集不可(読み取り専用)に設定
16. DataGridView の指定の列のみに罫線を描画する
17. DataGridView の
開発環境 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 Button81_Click(ByVal sender As System.Object, _
                           
ByVal e As System.EventArgs) Handles Button81.Click
'2列目までをスクロールされないように設定
    DataGridView1.Columns(1).Frozen = 
True

   'これで元に戻りそうに思うのだが、実際には元に戻らない
   DataGridView1.Columns(1).Frozen = 
False

   DataGridView1.Columns(0).Frozen = 
False   'こちらでないと元に戻らない

End Sub

2.DataGridView の指定列を非表示に設定

Private Sub Button82_Click(ByVal sender As System.Object, _
                           
ByVal e As System.EventArgs) Handles Button82.Click
'指定列(Columns(0))を非表示に設定
   DataGridView1.Columns(0).Visible = 
False
End Sub

3.DataGridView の指定列のセルに含まれるテキスト形式の内容を複数行で表示

Private Sub Button83_Click(ByVal sender As System.Object, _
                           
ByVal e As System.EventArgs) Handles Button83.Click
'指定列のデータを折り返して表示する場合
   '2列目を複数行表示設定に
   'WrapMode が True の場合は、改行文字が改行として表示され、
   'セル幅を超える行はすべて折り返して表示される。 
   DataGridView1.Columns(1).DefaultCellStyle.WrapMode = DataGridViewTriState.True
  '表示テスト用のデータをセルに書き込み
   DataGridView1.Rows(3).Cells(1).Value = 
"4行目の" & vbCrLf & "2列目に" & vbCrLf & "書き込み"

'指定列のセルに含まれるテキスト形式の内容を 1 行で表示する場合
   DataGridView1.Columns(1).DefaultCellStyle.WrapMode = DataGridViewTriState.False

End Sub

4.DataGridView の指定列の表示スタイルを設定

Private Sub Button84_Click(ByVal sender As System.Object, _
                           
ByVal e As System.EventArgs) Handles Button84.Click
'(1)指定列のフォントを設定
   
Dim cstyle As New DataGridViewCellStyle
   cstyle.Alignment = DataGridViewContentAlignment.MiddleRight
   cstyle.Font = 
New Font("MS ゴシック", 9, FontStyle.Bold)
   cstyle.Format = 
"N1"    '(5)下1桁で0揃え(小数点を表示する場合)
   DataGridView1.Columns(6).DefaultCellStyle = cstyle

'(2)指定列を日付の書式設定で表示
   '日付データが設定されたいる列で試してください。
   DataGridView1.Columns(3).DefaultCellStyle.Format = 
"yyyy年MM月dd日"

'(3)指定列を3桁区切りスタイルで表示
   DataGridView1.Columns(5).DefaultCellStyle.Format = 
"#,##0"
'(4)指定列を縦方向上揃え、水平方向右揃えで表示
   DataGridView1.Columns(4).DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopRight
End Sub

5.DataGridView の指定列を左端に表示する

Private Sub Button85_Click(ByVal sender As System.Object, _
                           
ByVal e As System.EventArgs) Handles Button85.Click
'3列目を左端に表示する
   DataGridView1.FirstDisplayedScrollingColumnIndex = 2
End Sub

6.DataGridView のセルの内容に合わせて全ての列の幅を自動調整

Private Sub Button86_Click(ByVal sender As System.Object, _
                           
ByVal e As System.EventArgs) Handles Button86.Click
'(1)全ての列幅を文字列のサイズに合せる場合
   DataGridView1.AutoResizeColumns()

'(2)全ての列幅を指定のサイズ設定する場合
   
For i As Integer = 0 To DataGridView1.Columns.Count - 1
      DataGridView1.Columns(i).Width = 100   
'(既定値  100)
   
Next
End Sub

7.DataGridView の指定の列に画像(イメージ、アイコン)を表示する
下記サンプルでは、新たに列を挿入してその列を Image 列に設定して、アイコンを合計点により変えて表示しております。
(アイコンは、ご自分で用意するか、添付の物を起動フォルダーに入れてお使いください)


Private Sub Button87_Click(ByVal sender As System.Object, _
                           
ByVal e As System.EventArgs) Handles Button87.Click
  '(1)イメージ列を作成しアイコンを表示する
   
Dim imageColumn As New DataGridViewImageColumn()
   
With imageColumn
      .Image = 
Nothing     ' Bitmap.FromFile("..\..\FACE03.ICO")
      .Name = 
"評価"
      .HeaderText = 
"評価"
      '(2)セルにエラー画像?(四角に赤い×の画像)が表示されないようにする
      .DefaultCellStyle.NullValue = 
Nothing
      .Width = 50
   
End With
   DataGridView1.Columns.Insert(0, imageColumn)   '列を挿入
   
For i As Integer = 0 To DataGridView1.Rows.Count - 2
     
Dim se As Integer = CInt(DataGridView1.Item(6, i).Value)
     
Select Case se    '(3)セルの値により表示する画像を選択する
         
Case Is > 260
            DataGridView1(
"評価", i).Value = New Bitmap("FACE03.ICO")
         
Case Is > 220
            DataGridView1(
"評価", i).Value = New Bitmap("FACE02.ICO")
         
Case Is > 180
            DataGridView1(
"評価", i).Value = New Bitmap("FACE01.ICO")
         
Case Else
            DataGridView1(
"評価", i).Value = New Bitmap("FACE04.ICO")
     
End Select
   
Next i
End Sub

8.DataGridView でユーザーが列のサイズ変更をできないように設定

Private Sub Button88_Click(ByVal sender As System.Object, _
                           
ByVal e As System.EventArgs) Handles Button88.Click
'ユーザーが列のサイズ変更をできないように設定する場合
   DataGridView1.AllowUserToResizeColumns = 
False

'ユーザーが列のサイズ変更をできるように設定する場合
   DataGridView1.AllowUserToResizeColumns = 
True
End Sub

9.DataGridView の列のデータに合せてIMEのモードを設定する

Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, _
                           
ByVal e As DataGridViewEditingControlShowingEventArgs) _
                                             
Handles DataGridView1.EditingControlShowing
   '(1)指定の列が TextBox タイプかを調べる
   
If TypeOf e.Control Is DataGridViewTextBoxEditingControl Then
     
Dim txtbox As DataGridViewTextBoxEditingControl = _
               
CType(e.Control, DataGridViewTextBoxEditingControl)
     
Dim dgv As DataGridView = CType(sender, DataGridView)
      '(2)2列目の場合は、IME モードをひらがなに設定
     
If dgv.CurrentCell.ColumnIndex = 1 Then
         txtbox.ImeMode = ImeMode.Hiragana
     
Else
         '(3)上記以外は、OFF に
         txtbox.ImeMode = ImeMode.Off
     
End If
   
End If
End Sub

10.DataGridView のユーザーがマウスのドラッグで列の順序を変更できるように設定

Private Sub Button90_Click(ByVal sender As System.Object, _
                           
ByVal e As System.EventArgs) Handles Button90.Click
'列の順番の入れ替えを有効にする(マウスのドラッグ操作で)
  DataGridView1.AllowUserToOrderColumns = 
True

'列の順番の入れ替えを無効にする(既定値)
  DataGridView1.AllowUserToOrderColumns = 
False

End Sub

11.DataGridView の指定の列を削除する

Private Sub Button91_Click(ByVal sender As System.Object, _
                           
ByVal e As System.EventArgs) Handles Button91.Click
'1列目を削除する
   DataGridView1.Columns.RemoveAt(0)

'行に関する操作関係の、DataGridView のクリックした行を確認の上削除 の項も参考に

End Sub

12.DataGridView の指定位置に列を挿入する

Private Sub Button92_Click(ByVal sender As System.Object, _
                           
ByVal e As System.EventArgs) Handles Button92.Click
'列の挿入(列の追加)
   
Dim newColumn As New DataGridViewTextBoxColumn
   DataGridView1.Columns.Insert(2, newColumn)

End Sub

13.DataGridView の指定の列の幅を設定する

Private Sub Button93_Click(ByVal sender As System.Object, _
                           
ByVal e As System.EventArgs) Handles Button93.Click
   '(1)セルの内容に合わせて、指定された列の幅を自動調整(処理に少し時間が掛かる)
   '全ての列幅を自動調整(DataGridView1.AutoResizeColumns())と間違えないように
   DataGridView1.AutoResizeColumn(0)

   '(2)幅が解っているなら下記のように直接指定した方が早い
   DataGridView1.Columns(0).Width = 45

'(3)全ての列に設定する場合
   
For i As Integer = 0 To DataGridView1.Columns.Count - 1
     
Select Case i
         
Case 0
            DataGridView1.Columns(i).Width = 45
         
Case 1
            DataGridView1.Columns(i).Width = 90
         
Case 2, 3, 4, 5, 6
            DataGridView1.Columns(i).Width = 70
     
End Select
   
Next

End Sub

14.DataGridView の指定の列を選択状態にする

Private Sub Button94_Click(ByVal sender As System.Object, _
                           
ByVal e As System.EventArgs) Handles Button94.Click
   '(1)SortMode が Automatic の場合列単位での選択ができないので
   
For i = 0 To DataGridView1.Columns.Count - 1
      DataGridView1.Columns(i).SortMode = DataGridViewColumnSortMode.Programmatic
   
Next i

   '(2)列のヘッダーまたは列内のセルをクリックすることによって列全体が選択されるように変更
   DataGridView1.SelectionMode = DataGridViewSelectionMode.FullColumnSelect

   '(3)2列目を全て選択状態にする
   DataGridView1.Columns(1).Selected = 
True

'選択されているセル数・行数・列数を取得する
   '選択されているセル数を取得
   Debug.WriteLine(DataGridView1.SelectedCells.Count)
   '選択されている行数を取得
   Debug.WriteLine(DataGridView1.SelectedRows.Count)
   '(4)選択されている列数を取得
   Debug.WriteLine(DataGridView1.SelectedColumns.Count)

End Sub

15.DataGridView の指定の列を編集不可(読み取り専用)に設定

Private Sub Button95_Click(ByVal sender As System.Object, _
                           
ByVal e As System.EventArgs) Handles Button95.Click
   '2列目(氏名の列)を編集不可に設定
   DataGridView1.Columns(1).ReadOnly = 
True

   '上記編集不可の設定を元に戻す
   DataGridView1.Columns(1).ReadOnly = 
False
End Sub

16.DataGridView の指定の列のみに罫線を描画する

Private Sub DataGridView1_CellPainting(ByVal sender As Object, _
         
ByVal e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) _
                                               
Handles DataGridView1.CellPainting
   '指定列以外及びヘッダー部分は除く
   
If e.ColumnIndex = 5 And e.RowIndex >= 0 Then
      '描画する範囲を設定
     
Dim newRect As New Rectangle(e.CellBounds.X, e.CellBounds.Y, _
                  e.CellBounds.Width, e.CellBounds.Height)
      'セルの内部を塗りつぶしす
      e.Graphics.FillRectangle(
New SolidBrush(e.CellStyle.BackColor), e.CellBounds)
      'セルを描画する(線の太さを2ピクセルで)
      e.Graphics.DrawRectangle(
New Pen(New SolidBrush(Color.Cyan), 2), newRect)
     
If (e.Value IsNot NothingThen
         'セル内のデータを描画する
         TextRenderer.DrawText(e.Graphics, 
CStr(e.Value), _
            e.CellStyle.Font, e.CellBounds, e.CellStyle.ForeColor, _
               TextFormatFlags.Right 
Or TextFormatFlags.VerticalCenter)
     
End If
      '処理の完了を通知
      e.Handled = 
True
   
End If

'DataGridView コントロールのセルの外観をカスタマイズする
'http://msdn.microsoft.com/ja-jp/library/hta8z9sz.aspx
End Sub

 


2011/05/20


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