VBレスキュー(花ちゃん)
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ各掲示板

メニューへ戻ります。 DataGridView 関係のメニュー
1.DataGridView でのデータの読込・保存・表示関係
2.DataGridView でのヘッダー関係の設定色々
3.DataGridView でのセルに関する操作関係色々 
4.DataGridView での行に関する操作関係色々 
5.DataGridView での列に関する操作関係色々 
6.DataGridView でのソート等のデータ操作関係色々
7.DataGridView で上記以外の設定色々
8. 
9. 
10. 
11.
12.
 . 
20.その他、当サイト内に掲載のDataGridView に関するサンプル 


1.DataGridView でのデータの読込・保存・表示関係(18_DGV_01) (旧、SampleNo.309)
1 .DataGridView を初期値に設定
2 .CSV ファイルを ADO.NET を使って DataGridView に読み込み表示
3 .CSV ファイルを ADO.NET を使って非連結での DataGridView に読み込み表示
4 .CSV ファイルを StreamReader を使って DataGridView に読み込み表示
5 .Excel ファイル(xls)を ADO.NET を使って DataGridView に読み込み表示
6 .Excel ファイル(xlsx)を ADO.NET を使って DataGridView に読み込み表示
7 .mdb ファイルを ADO.NET を使って DataGridView に読み込み表示
8 .accdb ファイルを ADO.NET を使って DataGridView に読み込み表示
9 .DataGridView に表示中のデータを CSV 形式で保存
10.
11.
12.
13.

 下記プログラムコードに関する補足・注意事項 
動作確認:Windows 8.1 (Windows 7) / VB2013 (VB2010) / Framework 4.5.1 / 対象の CPU:x86
Option :[Compare Text] [Explicit On] [Infer On] [Strict On]
Imports :追加なし
参照設定:
追加なし
その他 :使用データは、次よりダウンロードして使って下さい。 dgvdat.zip
    :このサンプルを使用される前に、左のメニューのDataGridViewでのデータの読込保存関係をご覧になって下さい。
このサンプル等の内容を無断で転載、掲載、配布する事はお断りします。(私の修正・改訂・削除等が及ばなくなるので)
必要ならリンクをはるようにして下さい。(引用の場合は引用元のリンクを明記して下さい)
このページのトップへ移動します。 1.DataGridView を初期値に設定

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'01.DataGridView を初期値に設定
    DGVClear(DataGridView1)    '初期化のSub プロシージャを Call

    '※ 通常は必要ありませんが、Tips の動作確認のために表示状態を元に戻す場合や
    '  データファイルを読み込み直す場合等に必要なので
End Sub

Private Sub DGVClear(ByVal dgv As DataGridView)
'DataGridView を初期値に設定するプロシージャ
    With dgv
        '列数が>0なら表示されていると判断し、一旦消去(表示速度には影響なし)
        If .Rows.Count > 0 Then
            .Columns.Clear()                            'コレクションを空にします(行・列削除)
            .DataSource = Nothing                       'DataSource に既定値を設定
            .DefaultCellStyle = Nothing                 'セルスタイルを初期値に設定
            .RowHeadersDefaultCellStyle = Nothing       '行ヘッダーを初期値に設定
            .RowHeadersVisible = True                   '行ヘッダーを表示
            'フォントの高さ+9 (フォントサイズ 9 の場合、12+9= 21 となる
            .RowTemplate.Height = 21                    'デフォルトの行の高さを設定(表示後では有効にならない)
            .ColumnHeadersDefaultCellStyle = Nothing    '列ヘッダーを初期値に設定
            .ColumnHeadersVisible = True                '列ヘッダーを表示
            .ColumnHeadersHeight = 23                   '列ヘッダーの高さを既定値に設定
            .TopLeftHeaderCell = Nothing                '左端上端のヘッダーを初期値に設定
            '奇数行に適用される既定のセルスタイルを初期値に設定 
            .AlternatingRowsDefaultCellStyle = Nothing
            'セルの境界線スタイルを初期値(一重線の境界線)に設定
            .AdvancedCellBorderStyle.All = DataGridViewAdvancedCellBorderStyle.Single
            .GridColor = SystemColors.ControlDark       'セルを区切るグリッド線の色を初期値に設定
            .Refresh()                                  '再描画
        End If
    End With
    '※ 上記設定は、必要により、追加・削除してください。
End Sub

このページのトップへ移動します。 2.CSV ファイルを ADO.NET を使って DataGridView に読み込み表示
1.のコードに下記コードを追加して下さい。

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
'02.CSV ファイルを ADO.NET を使って DataGridView に読み込み表示
    DGVClear(DataGridView1)                             '初期化のSub プロシージャを Call
    Using cn As New System.Data.OleDb.OleDbConnection
        'データファイルは、EXE と同じフォルダーに入れてください。
        'データのあるフォルダー(プログラム起動フォルダーのパスを指定)
        Dim FolderPath As String = "..\..\..\data"       ' Application.StartupPath
        'CSV ファイル名 (フルパスで書かないで下さい)
        Dim dbFileName As String = "dgvtest1.csv"
        cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data source=" & FolderPath & _
                ";Extended Properties=""Text;HDR=YES;IMEX=1;FMT=Delimited"""
        Using da As System.Data.OleDb.OleDbDataAdapter = _
            New System.Data.OleDb.OleDbDataAdapter("SELECT * FROM " & dbFileName, cn)
            Dim ds As New DataSet
            da.Fill(ds, dbFileName)
            'DataGridView に表示するデータソースを設定
            DataGridView1.DataSource = ds.Tables(dbFileName)
        End Using
    End Using
End Sub

 図1.上記実行図及び使用コントロールの配置図
 datagridview01_1
このページのトップへ移動します。 3.CSV ファイルを ADO.NET を使って非連結での DataGridView に読み込み表示
1.のコードに下記コードを追加して下さい。

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
'03.CSV ファイルを ADO.NET を使って非連結での DataGridView に読み込み表示
    DGVClear(DataGridView1)                 '初期化のSub プロシージャを Call
    DataGridView1.RowTemplate.Height = 60

    '読み込んだCSVファイルを編集・加工時に楽なように、非連結で表示しています。
    '但し、読み込み表示に時間がかかるので、目的やデータに合せて使ってください。
    Using cn As New System.Data.OleDb.OleDbConnection
        'データのあるフォルダー(プログラム起動フォルダーのパスを指定)
        Dim FolderPath As String = "..\..\..\data"       ' Application.StartupPathh
        'CSV ファイル名 (フルパスで書かないで下さい)
        Dim dbFileName As String = "dgvtest2.csv"
        'HDR 等の接続文字列のオプションの詳細説明は下記をご覧下さい。
        'http://hanatyan.sakura.ne.jp/vbhlp/dao_002.htm
        cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data source=" & FolderPath & _
                ";Extended Properties=""Text;HDR=YES;IMEX=1;FMT=Delimited"""
        Using da As System.Data.OleDb.OleDbDataAdapter = _
                    New System.Data.OleDb.OleDbDataAdapter("SELECT * FROM " & dbFileName, cn)
            Dim ds As DataSet = New DataSet()
            da.Fill(ds)
            '---------------------------------------------------------------------
            'TextBox 列を作成
            Dim newColumn(ds.Tables(0).Columns.Count - 1) As DataGridViewTextBoxColumn
            For i As Integer = 0 To ds.Tables(0).Columns.Count - 1
                newColumn(i) = New DataGridViewTextBoxColumn  '新規列を挿入
                DataGridView1.Columns.Insert(i, newColumn(i))
                'HeaderText を設定
                DataGridView1.Columns.Item(i).HeaderText = ds.Tables(0).Columns(i).Caption
            Next i
            '行を挿入
            DataGridView1.Rows.Insert(0, 1)
            Dim RcNo As Integer = -1
            For Each dr As DataRow In ds.Tables(0).Rows
                RcNo += 1
                If RcNo > 0 Then
                    '行を挿入
                    Me.DataGridView1.Rows.Insert(RcNo, 1)
                End If
                For i As Integer = 0 To ds.Tables(0).Columns.Count - 1
                    '各列にデータを表示
                    DataGridView1.Item(i, RcNo).Value = dr(i).ToString
                Next i
            Next
        End Using
    End Using
    DataGridView1.Columns(6).DefaultCellStyle.WrapMode = DataGridViewTriState.True
    DataGridView1.Columns(0).Width = 45
    DataGridView1.Columns(1).Width = 60
    DataGridView1.Columns(2).Width = 60
    DataGridView1.Columns(6).Width = 400
End Sub
 
このページのトップへ移動します。 4.CSV ファイルを StreamReader を使って DataGridView に読み込み表示
1.のコードに下記コードを追加して下さい。

Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
'04.CSV ファイルを StreamReader を使って DataGridView に読み込み表示
    DGVClear(DataGridView1)                                     '初期化のSub プロシージャを Call

    'Dim sTime0 As DateTime = Now                             '読み込み表示の計測時間の開始

    Dim DS As New DataSet
    Dim TB As DataTable = DS.Tables.Add                         'データセットにテーブルを追加する
    Dim dbFileName As String = "..\..\..\data\dgvtest1.csv"     '表示するCSVファイルを指定
    Dim n As Integer

    'CSVファイルをSHIFT_JISのコードページのエンコーディングで読込み
    Using sr1 As New System.IO.StreamReader(dbFileName, System.Text.Encoding.GetEncoding("SHIFT_JIS"))
        ' Dim sr1 As New System.IO.StreamReader(filePath, System.Text.Encoding.Default)
        '項目行を別途設定する場合
        'TB.Columns.Add("No", Type.GetType("System.Int16"))
        'TB.Columns.Add("氏名", Type.GetType("System.String"))
        'TB.Columns.Add("国語", Type.GetType("System.String"))
        'TB.Columns.Add("数学", Type.GetType("System.String"))
        'TB.Columns.Add("英語", Type.GetType("System.String"))
        'TB.Columns.Add("合計点", Type.GetType("System.String"))

        'ファイルの最後までループ
        Do Until sr1.Peek = -1
            n = n + 1
            If n = 1 Then
                '先頭行を項目として表示する場合
                Dim cmDat() As String = Split(sr1.ReadLine, ",")
                ' TB.Columns.Add("No", Type.GetType("System.Int16"))
                'テーブルにフィールドを追加する
                For i As Integer = 0 To UBound(cmDat)
                    ' "" で囲まれているデータは、"" を取り除く
                    cmDat(i) = cmDat(i).Trim(Chr(34))
                    Select Case i
                        Case 1, 7, 13, 19  '文字列
                            TB.Columns.Add(cmDat(i), Type.GetType("System.String"))
                        Case Else      '整数型
                            TB.Columns.Add(cmDat(i), Type.GetType("System.Int16"))
                    End Select
                Next
            Else
                '2行目以降のデータの設定
                Dim cmDat() As String = Split(sr1.ReadLine, ",")
                ' "" で囲まれているデータは、"" を取り除く
                For i = LBound(cmDat) To UBound(cmDat)
                    cmDat(i) = cmDat(i).Trim(Chr(34))
                Next
                TB.Rows.Add(cmDat)
            End If
        Loop
    End Using

    'データグリッドにテーブルを表示する
    DataGridView1.DataSource = TB
    'Dim eTime0 As DateTime = Now   '計測終了
    'MessageBox.Show(eTime0.Subtract(sTime0).TotalSeconds & " 秒かかりました。")
End Sub

このページのトップへ移動します。 5.Excel ファイル(xls)を ADO.NET を使って DataGridView に読み込み表示
1.のコードに下記コードを追加して下さい。

Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
'05.Excel ファイル(xls)を ADO.NET を使って DataGridView に読み込み表示
    DGVClear(DataGridView1)                             '初期化のSub プロシージャを Call
    Using cn As New System.Data.OleDb.OleDbConnection
    Using cm As New System.Data.OleDb.OleDbCommand
    Using da As New System.Data.OleDb.OleDbDataAdapter
        'Excelファイルのフルパスを設定
        Dim dbFileName As String = "..\..\..\data\dgvtest3.xls"
        'Excelファイルのシート名を設定
        Dim SheetName As String = "Sheet1"
        'データベースに接続するための情報を設定する
        cn.ConnectionString = "provider=Microsoft.jet.OLEDB.4.0;Data source=" & _
                dbFileName & ";Extended properties=""Excel 8.0;HDR=YES;IMEX=1"""
        'コネクションの設定
        cm.Connection = cn
        'データソースで実行するSQL文の設定
        cm.CommandText = "select * from [" & SheetName & "$]"
        '氏名に[子 or 正]の文字が含まれているデータを抽出して表示する場合
        'cm.CommandText = "Select * from [" & SheetName & "$] WHERE 氏名 LIKE '%子%' or 氏名 LIKE '%正%'"

        'データソース内のレコードを選択するためのSQLコマンドの設定
        da.SelectCommand = cm
        Dim ds As New DataSet
        da.Fill(ds, SheetName)
        'DataGridView に表示するデータソースを設定
        DataGridView1.DataSource = ds.Tables(SheetName)
    End Using
    End Using
    End Using
End Sub

このページのトップへ移動します。 6.Excel ファイル(xlsx)を ADO.NET を使って DataGridView に読み込み表示
1.のコードに下記コードを追加して下さい。

Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
'06.Excel ファイル(xlsx)を ADO.NET を使って DataGridView に読み込み表示
    DGVClear(DataGridView1)                             '初期化のSub プロシージャを Call
    Using cn As New System.Data.OleDb.OleDbConnection
    Using cm As New System.Data.OleDb.OleDbCommand
    Using da As New System.Data.OleDb.OleDbDataAdapter
        'Excelファイルのフルパスを設定
        Dim dbFileName As String = "..\..\..\data\dgvtest4.xlsx"
        'Excelファイルのシート名を設定
        Dim SheetName As String = "Sheet1"
        'データベースに接続するための情報を設定する
        cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data source=" & _
                dbFileName & ";Extended properties=""Excel 8.0;HDR=YES;IMEX=1"""
        'コネクションの設定
        cm.Connection = cn
        'データソースで実行するSQL文の設定
        cm.CommandText = "select * from [" & SheetName & "$]"
        '氏名に[子 or 正]の文字が含まれているデータを抽出して表示する場合
        'cm.CommandText = "Select * from [" & SheetName & "$] WHERE 氏名 LIKE '%子%' or 氏名 LIKE '%正%'"

        'データソース内のレコードを選択するためのSQLコマンドの設定
        da.SelectCommand = cm
        Dim ds As New DataSet
        da.Fill(ds, SheetName)
        'DataGridView に表示するデータソースを設定
        DataGridView1.DataSource = ds.Tables(SheetName)
    End Using
    End Using
    End Using
End Sub

このページのトップへ移動します。 7.mdb ファイルを ADO.NET を使って DataGridView に読み込み表示
1.のコードに下記コードを追加して下さい。

Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click
'07.mdb ファイルを ADO.NET を使って DataGridView に読み込み表示
    DGVClear(DataGridView1)                             '初期化のSub プロシージャを Call
    Using cn As New System.Data.OleDb.OleDbConnection
    Using cm As New System.Data.OleDb.OleDbCommand
    Using da As New System.Data.OleDb.OleDbDataAdapter
        Dim ds As New DataSet
        'EXE と同じフォルダーにデータも入れておく
        Dim dbFileName As String = "..\..\..\data\dgvtest5.mdb"
        Dim TableName As String = "Table1"   '指定のテーブル名(上記ファイル内に存在する事)
        '接続文字列については、WEB上で、[接続文字列]をキーに検索して見て下さい。
        cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                    "Data Source=" & dbFileName & ";"  'パスワード等があれば続けて記入
        'コネクションの設定
        cm.Connection = cn
        'データソースで実行するSQL文の設定
        cm.CommandText = "SELECT * from " & TableName
        'データソース内のレコードを選択するためのSQLコマンドの設定
        da.SelectCommand = cm
        'データを取得する
        da.Fill(ds, TableName)
        'データグリッドに表示するデータソースを設定
        DataGridView1.DataSource = ds
        'グリッドを表示するための、DataSource 内のリストを設定
        DataGridView1.DataMember = TableName
    'データソースへの接続を閉る
    End Using
    End Using
    End Using
End Sub

このページのトップへ移動します。 8.accdb ファイルを ADO.NET を使って DataGridView に読み込み表示
1.のコードに下記コードを追加して下さい。

Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click
'08.accdb ファイルを ADO.NET を使って DataGridView に読み込み表示
    DGVClear(DataGridView1)                             '初期化のSub プロシージャを Call
    Using cn As New System.Data.OleDb.OleDbConnection
    Using cm As New System.Data.OleDb.OleDbCommand
    Using da As New System.Data.OleDb.OleDbDataAdapter
        Dim ds As New DataSet
        'EXE と同じフォルダーにデータも入れておく
        Dim dbFileName As String = "..\..\..\data\dgvtest6.accdb"
        Dim TableName As String = "Table1"   '指定のテーブル名(上記ファイル内に存在する事)
        '接続文字列については、WEB上で、[接続文字列]をキーに検索して見て下さい。
        cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                              "Data Source=" & dbFileName & ";"     'パスワード等があれば続けて記入
        'コネクションの設定
        cm.Connection = cn
        'データソースで実行するSQL文の設定
        cm.CommandText = "SELECT * from " & TableName
        'データソース内のレコードを選択するためのSQLコマンドの設定
        da.SelectCommand = cm
        'データを取得する
        da.Fill(ds, TableName)
        'データグリッドに表示するデータソースを設定
        DataGridView1.DataSource = ds
        'グリッドを表示するための、DataSource 内のリストを設定
        DataGridView1.DataMember = TableName
    'データソースへの接続を閉る
    End Using
    End Using
    End Using
End Sub


このページのトップへ移動します。 9.DataGridView に表示中のデータを CSV 形式で保存
1.のコードに下記コードを追加して下さい。

Private Sub Button9_Click(sender As Object, e As EventArgs) Handles Button9.Click
'09.DataGridView に表示中のデータを CSV 形式で保存
    CsvFileSave("saveTest1.csv")
End Sub

Private Sub CsvFileSave(ByVal SaveFileName As String)
'DataGridView に表示中のデータを CSV 形式で保存用のプロシージャ
'VB のソースコードのようなデータも保存できるように設定してあり、普通のCSVファイルも保存できます。
    Dim dbFileName As String = SaveFileName
    '現在のファイルに上書き保存
    Using swCsv As New System.IO.StreamWriter(dbFileName, False, System.Text.Encoding.GetEncoding("SHIFT_JIS"))
        Dim sf As String = Chr(34)          'データの前側の括り
        Dim se As String = Chr(34) & ","    'データの後ろの括りとデータの区切りの "," 
        Dim i, j As Integer
        Dim WorkText As String = ""         '1個分のデータ保持用
        Dim LineText As String = ""         '1列分のデータ保持用

        With DataGridView1
            'ヘッダー部分の取得・保存(保存する必要がなければいらない)
            For i = 0 To .Columns.Count - 1
                WorkText = .Columns.Item(i).HeaderText
                If WorkText.IndexOf(Chr(34)) > -1 Then                  'データ内に " があるか検索
                    WorkText = WorkText.Replace("""", """""")           'あれば " を "" に置換える
                End If
                If i = .Columns.Count - 1 Then                          'ヘッダー行を列分連結
                    LineText &= sf & .Columns.Item(i).HeaderText & sf   '最後の列の場合
                Else
                    LineText &= sf & .Columns.Item(i).HeaderText & se
                End If
            Next i
            swCsv.WriteLine(LineText)                               'ヘッダーの部分の書き込み
            '最下部の新しい行(追加オプション)を非表示にする
            DataGridView1.AllowUserToAddRows = False
            '実データ部分の取得・保存処理
            For i = 0 To .RowCount - 1
                LineText = ""                                       '1行分のデータをクリア
                For j = 0 To .Columns.Count - 1                     '1行分のデータを取得処理
                    WorkText = .Item(j, i).Value.ToString           '1個セルデータを取得
                    If WorkText.IndexOf(Chr(34)) > -1 Then          'データ内に " があるか検索
                        WorkText = WorkText.Replace("""", """""")   'あれば " を "" に置換える
                    End If
                    If j = .Columns.Count - 1 Then                  '1行分の列データを連結
                        LineText &= sf & WorkText & sf              '最後の列の場合
                    Else
                        LineText &= sf & WorkText & se
                    End If
                Next j
                swCsv.WriteLine(LineText)                           '1行分のデータを書き込み
            Next i
        End With
    End Using
    MessageBox.Show("現在表示中のデータを " & dbFileName & " で保存しました。")
End Sub

このページのトップへ移動します。 10.

このページのトップへ移動します。 11. 

このページのトップへ移動します。 12.

このページのトップへ移動します。 13.

このページのトップへ移動します。 検索キーワード及びサンプルコードの別名(機能名)
データグリッドビュー




このページのトップへ移動します。