|
||||||||||||||||||||||||||||||||||||||||||||||||
開発環境 | 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 Button30_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button30.Click If DataGridView1.DefaultCellStyle.SelectionForeColor = SystemColors.HighlightText Then '(1)セルが選択された時の前景色を変更する DataGridView1.DefaultCellStyle.SelectionForeColor = Color.Red '(2)セルが選択された時の背景色を変更する DataGridView1.DefaultCellStyle.SelectionBackColor = Color.Green Else '(3)セルが選択された時の前景色を元に戻す DataGridView1.DefaultCellStyle.SelectionForeColor = SystemColors.HighlightText '(4)セルが選択された時の背景色を元に戻す DataGridView1.DefaultCellStyle.SelectionBackColor = SystemColors.Highlight End If End Sub |
||||||||||||||||||||||||||||||||||||||||||||||||
2.現在アクティブなセル(CurrentCell)を取得及び設定する Private Sub Button31_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button31.Click '(1)現在アクティブなセルの位置を取得(2方法) (2)アクティブなセルの値を取得する Dim msg As String = String.Format("Row: {0}, Column: {1},Value: {2}", _ DataGridView1.CurrentCell.RowIndex, _ DataGridView1.CurrentCell.ColumnIndex, _ DataGridView1.CurrentCell.Value.ToString()) MessageBox.Show(msg) '(1)現在アクティブなセルの行インデックスおよび列インデックスを取得 Debug.WriteLine(DataGridView1.CurrentCellAddress.Y & " " & DataGridView1.CurrentCellAddress.X) '(3)指定のセルをアクティブに設定する DataGridView1.CurrentCell = DataGridView1.Item(2, 3) End Sub |
||||||||||||||||||||||||||||||||||||||||||||||||
3.DataGridView のクリックしたセルの位置及び値を取得 Private Sub DataGridView1_MouseClick(ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGridView1.MouseClick 'クリックしたセルの位置及び値を取得 Dim pos As DataGridView.HitTestInfo = DataGridView1.HitTest(e.X, e.Y) 'Debug.Print(DataGridView1.Item(pos.ColumnIndex, pos.RowIndex).Value.ToString) If pos.Type = DataGrid.HitTestType.Cell Then MessageBox.Show(DataGridView1(pos.ColumnIndex, pos.RowIndex).ToString _ & " データ: " & CStr(DataGridView1.Item(pos.ColumnIndex, pos.RowIndex).Value)) End If End Sub |
||||||||||||||||||||||||||||||||||||||||||||||||
4.DataGridView の現在アクティブなセル(CurrentCell)に値を設定する Private Sub Button33_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button33.Click '現在アクティブなセル(カレントセル)に値を書き込み DataGridView1.CurrentCell.Value = "カレントセルに書き込み" End Sub |
||||||||||||||||||||||||||||||||||||||||||||||||
5.DataGridView の現在のセルを編集モードにする Private Sub Button34_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button34.Click '現在のセルを編集モードにします。 DataGridView1.BeginEdit(True) End Sub |
||||||||||||||||||||||||||||||||||||||||||||||||
6.DataGridView の指定のセルの値を読み書きする Private Sub Button36_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button36.Click '4列目の3行目に書込み(加藤愛子の数学の点数) DataGridView1.Item(3, 2).Value = 100 '4列目の3行目のセルの値を取得(加藤愛子の数学の点数) Debug.WriteLine(DataGridView1.Rows(2).Cells(3).Value) '結果 100 '2列目の2行目のセルの値を取得() Debug.WriteLine(DataGridView1.Item(1, 1).Value) '結果 深田 京子 '1列目の4行目のセルに書き込み DataGridView1.Rows(3).Cells(1).Value = "4行目の2列目に書き込み" '1列目の4行目のセルの値を取得 Dim CelTxt As String = DataGridView1.Rows(3).Cells(1).Value.ToString Debug.Print(CelTxt) '結果 4行目の2列目に書き込み End Sub |
||||||||||||||||||||||||||||||||||||||||||||||||
7.DataGridView の指定のセルを選択又はアクティブに設定する Private Sub Button39_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button39.Click '指定のセルを選択する(2列目の6行目を選択する) DataGridView1.Item(1, 5).Selected = True '指定のセルにカレントセルを移動する(2列目の6行目をアクティブにする) DataGridView1.CurrentCell = DataGridView1.Item(2, 3) End Sub |
||||||||||||||||||||||||||||||||||||||||||||||||
8.DataGridView の指定のセルの前景色と背景色を変更する Private Sub Button37_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button37.Click If DataGridView1(2, 1).Style.ForeColor = Color.Empty Then '3列目の2行目のセルの背景色と前景色を変更する DataGridView1(2, 1).Style.ForeColor = Color.Red DataGridView1(2, 1).Style.BackColor = Color.Green Else '3列目の2行目のセルの背景色と前景色を元に戻す DataGridView1(2, 1).Style.ForeColor = Color.Empty DataGridView1(2, 1).Style.BackColor = Color.Empty End If End Sub |
||||||||||||||||||||||||||||||||||||||||||||||||
9.DataGridView の初期表示時に選択されているセルをなくす Private Sub Button40_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button40.Click '必要な個所で下記コードを実行してください。 DataGridView1.CurrentCell = Nothing End Sub |
||||||||||||||||||||||||||||||||||||||||||||||||
10.DataGridView の全てのセルを選択する/全てのセルの選択状態を解除する Private Sub Button41_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button41.Click '全てのセルを選択 DataGridView1.SelectAll() '全ての選択を解除します DataGridView1.ClearSelection() End Sub |
||||||||||||||||||||||||||||||||||||||||||||||||
11.DataGridView のセルに書式設定をして表示 Private Sub Button42_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button42.Click Dim cstyle As New DataGridViewCellStyle cstyle.Format = "N1" '下1桁で0揃え N2 :下2桁 (小数点を表示する場合) cstyle.Format = "#,###" '3桁区切りスタイルの場合 cstyle.Format = "0000000" '前方に00を付けて表示する場合 0000123 cstyle.Format = "合計点= ### 点" '文書を付けて表示する場合 合計点は= 267 点 DataGridView1.Columns(5).DefaultCellStyle = cstyle '書式指定文字は、下記で調べて下さい。 'http://msdn.microsoft.com/ja-jp/library/dwhawy9k.aspx End Sub |
||||||||||||||||||||||||||||||||||||||||||||||||
12.DataGridView のセルのフォントを設定 Private Sub Button43_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button43.Click '(1)全てのセルに対して設定する場合 DataGridView1.DefaultCellStyle.Font = New Font("MS ゴシック", 10, FontStyle.Bold) '(2)セル個別に設定する場合 DataGridView1.Item(2, 3).Style.Font = New Font("MS UI Gothic", 15, FontStyle.Regular) '(3)特定の列に対して設定する場合 Dim cstyle As New DataGridViewCellStyle cstyle.Font = New Font("MS ゴシック", 8, FontStyle.Regular) DataGridView1.Columns(5).DefaultCellStyle = cstyle '(4)設定値を元に戻す場合 '下記では、セル個別に変更した分は元に戻りません DataGridView1.DefaultCellStyle = Nothing '個別に元に戻す必要がある DataGridView1.Item(2, 3).Style = Nothing End Sub |
||||||||||||||||||||||||||||||||||||||||||||||||
13.DataGridView のDataGridView のセルの境界線スタイル/カラーを設定 Private Sub Button44_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button44.Click '(1)セルを区切るグリッド線の色を設定 DataGridView1.GridColor = Color.Blue '(2)セル境界線スタイルを一重線の境界線に設定 DataGridView1.CellBorderStyle = DataGridViewCellBorderStyle.Single 'セルの上側の境界線スタイルを二重線のくぼんだ境界線に設定 DataGridView1.AdvancedCellBorderStyle.Top = DataGridViewAdvancedCellBorderStyle.InsetDouble 'セルの左側の境界線スタイルを二重線の浮き出した境界線に設定 DataGridView1.AdvancedCellBorderStyle.Left = DataGridViewAdvancedCellBorderStyle.OutsetDouble '(3)グリッド線の色とスタイルをデフォルトに設定 DataGridView1.GridColor = SystemColors.ControlDarkDark DataGridView1.AdvancedCellBorderStyle.Top = DataGridViewAdvancedCellBorderStyle.None DataGridView1.AdvancedCellBorderStyle.Left = DataGridViewAdvancedCellBorderStyle.None End Sub |
||||||||||||||||||||||||||||||||||||||||||||||||
14.セルの値が変更された事を取得する Private CellValChang As Boolean Private Sub DataGridView1_CellValueChanged(ByVal sender As Object, _ ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) _ Handles DataGridView1.CellValueChanged 'セルの値が変更された場合にこのイベントが発生する。 '表示1のようにバインドされている場合の読み込み時は発生しないが、非結合の場合は発生する '又、行の挿入・削除のような場合も発生しない。確認してから使用の事 '(別途、削除や挿入した場合は、このフラグを True にする等で対応する) 'データの読込後に、False に設定し、保存前等に値を確認する CellValChang = True 'イベントが発生したらフラグを設定する End Sub |
||||||||||||||||||||||||||||||||||||||||||||||||
15.DataGridView のセルの値によってセルの色等を変更する 下記は、テストの合計点によってセルの色分けをしている、コード自体は特に目新しいものではないが、CellFormatting イベント内で処理する事によって簡単に設定できる Private Sub DataGridView1_CellFormatting(ByVal sender As Object, _ ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs _ ) Handles DataGridView1.CellFormatting 'セルの値によってセルの色等を変更する Dim dgv As DataGridView = CType(sender, DataGridView) If dgv(5, e.RowIndex).Value IsNot Nothing Then If CInt(dgv(5, e.RowIndex).Value) < 180 Then dgv(5, e.RowIndex).Style.BackColor = Color.Red ElseIf CInt(dgv(5, e.RowIndex).Value) < 210 Then dgv(5, e.RowIndex).Style.BackColor = Color.Yellow Else e.CellStyle.BackColor = Color.White End If End If End Sub |
||||||||||||||||||||||||||||||||||||||||||||||||
16.DataGridView のセル値が DBNull.Value 又は Nothing の場合に任意の文字を表示する Private Sub Button48_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button48.Click 'セル値が DBNull.Value または Nothing である場合に DataGridView のセルに表示する値を取得または設定 '(実際にセルに書き込まれるのではありません、従って保存もできません書き込むには編集する必要があります、詳しくは、MSDN を) DataGridView1.DefaultCellStyle.NullValue = "?" 'DataGridView1.DefaultCellStyle.NullValue = "空のセルです" '元の(デフォルト)状態に戻す場合 DataGridView1.DefaultCellStyle.NullValue = String.Empty End Sub |
||||||||||||||||||||||||||||||||||||||||||||||||
17.DataGridView の複数選択されているセルを取得・表示 Private Sub Button49_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button49.Click '(1)複数選択されているセルを取得・表示 For Each Cel As DataGridViewCell In DataGridView1.SelectedCells Debug.Print(String.Format("ColumnIndex = {0} RowIndex = {1}", Cel.ColumnIndex, Cel.RowIndex)) Next Cel '(2)選択されているセル数を取得 Debug.WriteLine(DataGridView1.SelectedCells.Count) '選択されている行数を取得 Debug.WriteLine(DataGridView1.SelectedRows.Count) '選択されている列数を取得 Debug.WriteLine(DataGridView1.SelectedColumns.Count) End Sub |
||||||||||||||||||||||||||||||||||||||||||||||||
18.DataGridView の複数のセル、行、列を同時に選択できるかどうかを設定する Private Sub Button50_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button50.Click '複数セル(行・列)の選択を禁止する場合 DataGridView1.MultiSelect = False '複数セル(行・列)の選択を可能にする場合 DataGridView1.MultiSelect = True End Sub |
||||||||||||||||||||||||||||||||||||||||||||||||
19.DataGridView の指定のセルを編集不可(読み取り専用)に設定 Private Sub Button51_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button51.Click '(1)7行目の4列目(原田 智子の数学の点数)を編集不可に設定 DataGridView1.Item(3, 6).ReadOnly = True '(2)セル全体を編集不可に設定する場合 DataGridView1.ReadOnly = True '上記編集不可の設定を元に戻す DataGridView1.Item(3, 6).ReadOnly = False DataGridView1.ReadOnly = False End Sub |
||||||||||||||||||||||||||||||||||||||||||||||||
20.DataGridView の指定のセルのみに罫線を描画する Private Sub DataGridView1_CellPainting(ByVal sender As Object, _ ByVal e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) _ Handles DataGridView1.CellPainting If e.RowIndex = 5 And e.ColumnIndex = 1 Then Dim flgStyle As TextFormatFlags '描画する範囲を設定(下側の線が細くなるので描画位置を Height - 1) Dim newRect As New Rectangle(e.CellBounds.X, e.CellBounds.Y, _ e.CellBounds.Width, e.CellBounds.Height - 1) 'セルの内部を塗りつぶしす e.Graphics.FillRectangle(New SolidBrush(e.CellStyle.BackColor), e.CellBounds) 'セルを描画する(線の太さを2ピクセルで) e.Graphics.DrawRectangle(New Pen(New SolidBrush(Color.HotPink), 2), newRect) If (e.Value IsNot Nothing) Then 'セルデータの表示位置を列個別に設定(本来は指定のセル分だけでよい) Select Case e.ColumnIndex Case 0, 2, 3, 4, 5 flgStyle = TextFormatFlags.VerticalCenter Or TextFormatFlags.Right Case 1 flgStyle = TextFormatFlags.VerticalCenter Or TextFormatFlags.Left End Select TextRenderer.DrawText(e.Graphics, CStr(e.Value), _ e.CellStyle.Font, e.CellBounds, e.CellStyle.ForeColor, flgStyle) End If '処理の完了を通知 e.Handled = True End If 'DataGridView コントロールのセルの外観をカスタマイズする 'http://msdn.microsoft.com/ja-jp/library/hta8z9sz.aspx End Sub |