DataGridView Tips集(データの読込・保存・表示関係) (309) 玄関へお回り下さい。
 
1.CSVファイルをADO.NETを使ってDataGridViewに表示(その1)
2.CSVファイルをADO.NETを使って非連結でDataGridViewに表示(その2)
3.Excel ファイルをADO.NETを使ってDataGridViewに表示
4.mdbファイルをADO.NETを使ってDataGridViewに表示
5.DataGridView に表示中のデータをCSV形式で保存
6.DataGridViewでチェックボックスを表示する
7.DataGridView 初期化プロシージャ
 (1)コレクションを空にします(行・列削除)  (2)DataSource に既定値を設定  (3)セルスタイルを初期値に設定  
 (4)行ヘッダーを初期値に設定  (5)行ヘッダーを表示  (6)デフォルトの行の高さを設定  (7)列ヘッダーを初期値に設定
 (8)列ヘッダーを表示  (9)列ヘッダーの高さを既定値に設定  (10)左端上端のヘッダーを初期値に設定  
 (11)奇数行に適用される既定のセルスタイルを初期値に設定   (12)セルの境界線スタイルを初期値(一重線の境界線)に設定  
 (13)セルを区切るグリッド線の色を初期値に設定 

開発環境 WindowsVista VB2010(VS2010 Pro) Framework 4 / ターゲットCPU:X86
[Option Compare Text] [Option Explicit On] [Option Infer On] [Option Strict On]で設定
その他条件 使用データ(dgvdat1.csv)は、次よりダウンロードして使って下さい。 dgvdat309.zip
データファイルは、プログラムの起動フォルダーに入れておいてください。
1.CSVファイルをADO.NETを使ってDataGridViewに表示(その1)

下記方法は、比較的簡単で、VBのソースコードのようなデータ(vb60log.csv)も読み込み表示出来る上に結構素早く読み込むことができ便利かと思います。

Private Sub Button2_Click(ByVal sender As System.Object, _
                         
ByVal e As System.EventArgs) Handles Button2.Click
   DGVClear(DataGridView1)   
'初期化のSub プロシージャを Call
'CSVファイルをADO.NETを使ってDataGridViewに表示その1
   
Using cn As New System.Data.OleDb.OleDbConnection
      'データファイルは、EXE と同じフォルダーに入れてください。
     
Dim FolderPath As String = Application.StartupPath()
     
Dim csvFileName As String = "dgvdat1.csv"   '"uriage.csv" '
      cn.ConnectionString = 
"Provider=Microsoft.Jet.OLEDB.4.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 " & csvFileName, cn)
         
Dim ds As New DataSet
         da.Fill(ds, 
"Table1")
         'DataGridView に表示するデータ ソースを設定
         DataGridView1.DataSource = ds.Tables(
"Table1")
     
End Using
   
End Using
   '※ 上記読み込み例は、Microsoft Chart Controls のサンプルで使っているコードと同じです。
   '表示するデータ ソースを設定 の部分だけが追加になっています。
End Sub


7.DataGridView 初期化プロシージャ

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

Private Sub DGVClear(ByVal dgv As 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に表示(その2)

CSVファイルをADO.NETを使って、1行づつ表示 (MyClipBoard で使用)
読み込んだCSVファイルを編集・加工時に楽なように、非連結で表示しています。
但し、読み込み表示に時間がかかるので、目的やデータに合せて使ってください。
使用データファイルは、vb60log.csv を使ってください。(dgvdat1.csv でも表示可)

Private Sub Button3_Click(ByVal sender As System.Object, _
                         
ByVal e As System.EventArgs) Handles Button3.Click
   DGVClear(DataGridView1)   
'初期化のSub プロシージャを Call
   DataGridView1.RowTemplate.Height = 60

   Using cn As New System.Data.OleDb.OleDbConnection
      'データのあるフォルダー(下記の場合は、プログラム起動フォルダーのパスを指定)
     
Dim FolderPath As String = Application.StartupPath
      'CSV ファイル名 (フルパスで書かないで下さい)
     
Dim csvFileName As String = "vb60log.csv"
      'HDR 等の接続文字列のオプションの詳細説明は下記をご覧下さい。
      cn.ConnectionString = 
"Provider=Microsoft.Jet.OLEDB.4.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 " & csvFileName, 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

3.Excel ファイルをADO.NETを使ってDataGridViewに表示

 下記の[サンプル投稿用掲示板]内で紹介しておりますので、そちらをご覧ください。
 http://hanatyan.sakura.ne.jp/patio/read.cgi?no=252

4.mdbファイルをADO.NETを使ってDataGridViewに表示

 下記の[サンプル投稿用掲示板]内で紹介しておりますので、そちらをご覧ください。
 http://hanatyan.sakura.ne.jp/patio/read.cgi?no=253

5.DataGridView に表示中のデータをCSV形式で保存

VB のソースコードのようなデータも保存できるように設定してあり、普通のCSVファイルも保存できます。
append を false で設定しておりますので(上書き/名前を付けて保存に対応)目的に合せて変更して下さい。
若干保存に時間がかかるかも知れませんが、大抵のデータに対応でき、Excel 等に表示する場合でも難なく表示でき便利かと思います。


Private Sub Button7_Click(ByVal sender As System.Object, _
                         
ByVal e As System.EventArgs) Handles Button7.Click
   CsvFileSave(
"saveTest2.csv")
End Sub

Private Sub CsvFileSave(ByVal SaveFileName As String)
'表示中のデータをCSV形式で(上書き保存)保存
   Dim FileName As String = SaveFileName
   '現在のファイルに上書き保存
   
Using swCsv As New System.IO.StreamWriter(FileName, _
                             
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(
"現在表示中のデータを " & FileName & " で保存しました。")
End Sub

6.DataGridViewでチェックボックスを表示する
 
 下記の[サンプル投稿用掲示板]内で紹介しておりますので、そちらをご覧ください。
 http://hanatyan.sakura.ne.jp/patio/read.cgi?no=254

 


2011/05/20


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