5.DataGridView での列に関する操作関係色々(18_DGV_05) (旧、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.DataGridView の指定の列目までをスクロールされないように設定 |
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click '01.DataGridView の指定の列目までをスクロールされないように設定 If DataGridView1.Rows.Count = 0 Then Button1.PerformClick() End If '全ての列幅を指定の幅に設定 For Each com As DataGridViewColumn In DataGridView1.Columns com.Width = 300 Next '指定の列幅を指定の幅に設定 DataGridView1.Columns(0).Width = 50 Me.Width = 1000 '指定の列目までをスクロールされないように設定 DataGridView1.Columns(1).Frozen = True 'これで元に戻りそうに思うのだが、実際には元に戻らない DataGridView1.Columns(1).Frozen = False 'こちらでないと元に戻らない 'DataGridView1.Columns(0).Frozen = False End Sub |
2.DataGridView の指定列を非表示に設定 |
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click '02.DataGridView の指定列を非表示に設定 If DataGridView1.Rows.Count = 0 Then Button1.PerformClick() End If '指定列(Columns(0))を非表示に設定 DataGridView1.Columns(0).Visible = False wt.WaitTime(2000) '指定列(Columns(0))を表示に設定 DataGridView1.Columns(0).Visible = True End Sub |
3.指定列のセルに含まれるテキスト形式の内容を複数行で表示 |
Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click '03.指定列のセルに含まれるテキスト形式の内容を複数行で表示 If DataGridView1.Rows.Count = 0 Then Button1.PerformClick() End If 'WrapMode が True の場合は、改行文字が改行として表示され、セル幅を超える行はすべて折り返して表示される。 DataGridView1.Columns(1).DefaultCellStyle.WrapMode = DataGridViewTriState.True DataGridView1.Rows(3).Cells(1).Value = "4行目の" & vbCrLf & "2列目に" & vbCrLf & "書き込み" DataGridView1.Rows(3).Height = 50 wt.WaitTime(2000) 'プロパティは設定されていなくて、既定の方法で動作します。(DataGridViewTriState.False でも動作は同じ) DataGridView1.Columns(1).DefaultCellStyle.WrapMode = DataGridViewTriState.NotSet End Sub |
4.指定列の表示スタイルを設定 |
セルに書式設定をして表示 と同じ事です。 Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click '04.指定列の表示スタイルを設定 If DataGridView1.Rows.Count = 0 Then Button1.PerformClick() End If DataGridView1.Rows(3).Height = 50 '指定列の表示スタイルを設定(フォント・配置・セルのFormat) Dim cstyle As New DataGridViewCellStyle cstyle.Alignment = DataGridViewContentAlignment.MiddleRight cstyle.Font = New Font("MS ゴシック", 12, FontStyle.Bold) cstyle.Format = "N1" '下1桁で0揃え DataGridView1.Columns(5).DefaultCellStyle = cstyle '指定列の表示スタイルを日付の書式に設定 '日付データが設定されている列で試してください。 DataGridView1.Columns(1).DefaultCellStyle.Format = "yyyy年MM月dd" '縦方向上揃え、水平方向右揃えに設定 DataGridView1.Columns(2).DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopRight DataGridView1.Columns(3).DefaultCellStyle.Format = "#,##0.0" DataGridView1.Columns(4).DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight End Sub |
5.指定列を左端先頭に表示する |
Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click '05.指定列を左端先頭に表示する If DataGridView1.Rows.Count = 0 Then Button1.PerformClick() End If '全ての列幅を指定の幅に設定 For Each com As DataGridViewColumn In DataGridView1.Columns com.Width = 200 Next '指定列を左端に表示する(3列目を左端先頭に表示) DataGridView1.FirstDisplayedScrollingColumnIndex = 2 End Sub |
6.セルの内容に合わせて全ての列の幅を自動調整 |
Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click '06.セルの内容に合わせて全ての列の幅を自動調整 Button1.PerformClick() wt.WaitTime(1000) 'すべての列の幅をヘッダーセルを除くすべてのセルの内容(文字列幅)に合わせて調整 DataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.DisplayedCellsExceptHeader) wt.WaitTime(2000) 'すべての列の幅をヘッダーセルを含むすべてのセルの内容(文字列幅)に合わせて調整 DataGridView1.AutoResizeColumns() End Sub |
7.指定位置に列を挿入する / 指定の列を削除する |
Private Sub Button9_Click(sender As Object, e As EventArgs) Handles Button9.Click '07.指定位置に列を挿入する / 指定の列を削除する If DataGridView1.Rows.Count = 0 Then Button1.PerformClick() End If wt.WaitTime(2000) '列の挿入(単純な列の追加) Dim newColumn As New DataGridViewTextBoxColumn DataGridView1.Columns.Insert(2, newColumn) wt.WaitTime(2000) 'Image 列を新規作成追加する場合 Dim imageColumn As New DataGridViewImageColumn() With imageColumn .Image = Nothing ' Bitmap.FromFile("..\..\FACE03.ICO") .Name = "評価" .HeaderText = "評価" 'セルに四角に赤いXの画像が表示されないようにする .DefaultCellStyle.NullValue = Nothing .Width = 55 End With DataGridView1.Columns.Insert(0, imageColumn) wt.WaitTime(2000) '列の削除 '行に関する操作関係の、クリックした行を確認の上削除の項も参考に DataGridView1.Columns.RemoveAt(3) DataGridView1.Columns.RemoveAt(0) End Sub |
8.指定の列に画像(イメージ、アイコン)を表示する |
Private Sub Button10_Click(sender As Object, e As EventArgs) Handles Button10.Click '08.指定の列に画像(イメージ、アイコン)を表示する If DataGridView1.Rows.Count = 0 Then Button1.PerformClick() End If 'Image 列を新規作成追加 Dim imageColumn As New DataGridViewImageColumn() With imageColumn .Image = Nothing ' Bitmap.FromFile("..\..\FACE03.ICO") .Name = "評価" .HeaderText = "評価" 'セルに四角に赤いXの画像が表示されないようにする .DefaultCellStyle.NullValue = Nothing .Width = 55 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 '成績により画像を選択(指定の列のイメージを変更する) Case Is > 260 DataGridView1("評価", i).Value = New Bitmap("..\..\..\data_pic\FACE03.ICO") Case Is > 220 DataGridView1("評価", i).Value = New Bitmap("..\..\..\data_pic\FACE02.ICO") Case Is > 180 DataGridView1("評価", i).Value = New Bitmap("..\..\..\data_pic\FACE01.ICO") Case Else DataGridView1("評価", i).Value = New Bitmap("..\..\..\data_pic\FACE04.ICO") End Select Next i End Sub |
9.ユーザーが列のサイズを変更できないように設定 |
Private Sub Button11_Click(sender As Object, e As EventArgs) Handles Button11.Click '09.ユーザーが列のサイズを変更できないように設定 If DataGridView1.Rows.Count = 0 Then Button1.PerformClick() End If If DataGridView1.AllowUserToResizeColumns = True Then 'ユーザーが列のサイズを変更できないように設定 DataGridView1.AllowUserToResizeColumns = False Else 'ユーザーが列のサイズを変更できるように設定(規定値) DataGridView1.AllowUserToResizeColumns = True End If End Sub |
10.DataGridView の列のデータに合せてIMEのモードを設定する |
別途、入力されるデータのエラーチェックは設定しておいて下さい。 Private frg10 As Boolean Private Sub Button12_Click(sender As Object, e As EventArgs) Handles Button12.Click '10.DataGridView の列のデータに合せてIMEのモードを設定する frg10 = Not frg10 Button1.PerformClick() DataGridView1.Focus() End Sub Private Sub DataGridView1_CellEnter(sender As Object, e As DataGridViewCellEventArgs) _ Handles DataGridView1.CellEnter If frg10 Then With DataGridView1 Dim ColName As String = .Columns.Item(e.ColumnIndex).HeaderText Select Case ColName Case "No", "国語", "数学", "英語", "合計点" .ImeMode = ImeMode.Alpha Case "氏名" .ImeMode = ImeMode.Hiragana Case Else .ImeMode = ImeMode.Off End Select End With End If End Sub |
11.ユーザーがマウスのドラッグで列の順序を変更できるように設定 |
Private Sub Button13_Click(sender As Object, e As EventArgs) Handles Button13.Click '11.ユーザーがマウスのドラッグで列の順序を変更できるように設定 If DataGridView1.Rows.Count = 0 Then Button1.PerformClick() End If If DataGridView1.AllowUserToOrderColumns = False Then '列の順番の入れ替えを有効にする(マウスのドラッグ操作で) DataGridView1.AllowUserToOrderColumns = True Else '列の順番の入れ替えを無効にする(規定値) DataGridView1.AllowUserToOrderColumns = False End If End Sub |
12.DataGridView の指定の列を選択状態にする |
Private Sub Button14_Click(sender As Object, e As EventArgs) Handles Button14.Click '12.DataGridView の指定の列を選択状態にする If DataGridView1.Rows.Count = 0 Then Button1.PerformClick() End If 'SortMode が Automatic の場合列単位での選択ができないので For i = 0 To DataGridView1.Columns.Count - 1 DataGridView1.Columns(i).SortMode = DataGridViewColumnSortMode.Programmatic Next i '列のヘッダーまたは列内のセルをクリックすることによって列全体が選択されるように変更 DataGridView1.SelectionMode = DataGridViewSelectionMode.FullColumnSelect '2列目を全て選択状態にする DataGridView1.Columns(1).Selected = True '選択されている列数を取得 Debug.WriteLine(DataGridView1.SelectedColumns.Count) '選択されているセル数を取得 Debug.WriteLine(DataGridView1.SelectedCells.Count) '選択されている行数を取得 Debug.WriteLine(DataGridView1.SelectedRows.Count) End Sub |
13.DataGridView の指定の列を編集不可(読み取り専用)に設定 |
Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click '13.DataGridView の指定の列を編集不可(読み取り専用)に設定 If DataGridView1.Rows.Count = 0 Then Button1.PerformClick() End If ''2列目(氏名の列)を編集不可に設定 'DataGridView1.Columns(1).ReadOnly = True ''上記編集不可の設定を元に戻す 'DataGridView1.Columns(1).ReadOnly = False DataGridView1.Columns(1).ReadOnly = Not DataGridView1.Columns(1).ReadOnly End Sub |
14.DataGridView の指定の列のみに罫線を描画する |
Private frg14 As Boolean Private Sub Button16_Click(sender As Object, e As EventArgs) Handles Button16.Click '14.DataGridView の指定の列のみに罫線を描画する frg14 = Not frg14 Button1.PerformClick() End Sub Private Sub DataGridView1_CellPainting(sender As Object, e As DataGridViewCellPaintingEventArgs) _ Handles DataGridView1.CellPainting '指定列以外及びヘッダー部分は除く If frg14 = True And e.ColumnIndex = 4 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 Nothing) Then 'セル内のデータを描画する 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 |
15. |
16. |
17. |
18. |
検索キーワード及びサンプルコードの別名(機能名) |
1列目を右揃えに設定 配置位置の設定・縦方向中央揃え・水平方向右揃えに設定 列の順番の入れ替えを有効にする(ユーザーによるマウスのドラッグ操作で) 列に画像を表示する(セルの値により表示する画像を変更する) すべての列幅を文字のサイズに合せる 列のサイズ変更を不可に設定 指定行を折り返して複数行表示する 指定列(Columns(0))を非表示に設定する 指定のヘッダーのバックカラー及びフォアカラーを設定する 1列目の列幅を文字は幅に合せる等の列幅の設定方法 AutoResizeColumn(0) 指定の列までをスクロールされないようにする 指定位置に新規に列を挿入する 指定列を画面の最左側に表示する(指定列までは非表示のような事)
指定列のフォントを設定 指定列を日付の書式設定で表示 指定列を3桁区切りスタイルで表示 指定列を縦方向上揃え、水平方向右揃えで表示 下1桁で0揃え(小数点を表示する場合)
全ての列幅を文字列のサイズに合せる 全ての列幅を指定のサイズ設定 イメージ列を作成しアイコンを表示する セルにエラー画像?(四角に赤い×の画像)が表示されないようにする セルの値により表示する画像を選択する 指定の列が
TextBox タイプかを調べる 2列目の IME モードをひらがなに設定する IME モード をOff に設定する セルの内容に合わせて、指定された列の幅を自動調整 指定の列の幅を設定する 全ての列に対して個別に設定する
SortMode の Automatic を Programmatic に変更する 列のヘッダーまたは列内のセルをクリックすることによって列全体が選択されるようにする 指定の列を全て選択状態にする 択されている列数を取得
|