プログラミングメモ

思った通りに動いてくれて嬉しかったこと

Csvファイルを読み込みDataGridViewへ表示してみる

概要

Csvファイルを読み込みDataGridViewへ表示します。

なお、Csvファイル1行目はヘッダー行として扱い

DataColumnを生成します。

 

準備

WindowsフォームVBプロジェクトのフォーム上に

Button.Button1(DTTest呼び出し用)

DataGridView.DataGridView1

を設置してください。

 

適当な場所へ以下のようなCsvデータファイルを作成しましょう。

 

TestData.csv

教科,点数
国語,24
数学,75
理科,67
社会,37

赤点2教科ありますね… (爆)

 

サンプルコード

Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles       Button1.Click
    CsvToGrid()
End Sub

 

Sub CsvToGrid()


    Dim Path As String = "D:\Temp\TestData.csv" 'CsvファイルのPathを指定
    Dim SR As New StreamReader(Path) 'StreamReader
    Dim linebuf As String 'データ保持用

    'DataGrid初期化
    DataGridView1.Columns.Clear()

    'Csvファイルより1行読込(ヘッダー行)
    linebuf = SR.ReadLine()

    'データが無ければ終了
    If linebuf = Nothing Then Exit Sub

    'DataGridColum(列)生成
    Dim ColArr() As String = linebuf.Split(",")

 

    For Each buf In ColArr
        DataGridView1.Columns.Add(buf, buf)
    Next


    Do

        'Csvファイルより2行目以降読込み
        linebuf = SR.ReadLine()

        'データが無ければループ終了
        If linebuf = Nothing Then Exit Do

        Dim RowArr() As String = linebuf.Split(",")

        'DataGrid行を追加
        DataGridView1.Rows.Add(RowArr)
    Loop

    SR.Close()

 

End Sub

 

解説

StreamReaderを使い、ReadLine()で1行ずつCSVファイルの内容を読み取っています。

ReadLine()を呼ぶ度に、Csvファイルの次の行の読み込みを行います。

後は、Split()を使い、","(カンマ)を機切り文字としてデータ毎に分割を行い

DataGridColumの生成、および配列データでRowを追加しています。

 

StreamReaderの動作中は、対象ファイルがロックされます。

処理が終わったら、Close()しましょう。

 

尚、Csvファイルは直接DataTableに読み込むことも可能ですので

機会がありましたら記事にしたいと思います。

 

実行結果

f:id:megrez11278:20170822220832j:plain