第22章 作って覚えるで学ぶCSV読み書きとDataGridView
この章の目的
Section titled “この章の目的”この章では、書籍「作って覚える Visual C# 2022 デスクトップアプリ超入門」の Chapter 7.1「『CSVの読み書きアプリ』の作成」(CsvReadWrite)を参照しながら、Windows フォームアプリで 表形式のデータ を扱う方法を学習します。
これまでは「テキストボックスに入力 → 計算結果を表示」のような 1 件単位 のデータを扱ってきました。 この章では、社員一覧のような 複数行・複数列 のデータを扱います。
社員ID,社員名,部署名1001,山田二郎,総務1002,佐藤昭夫,営業1003,山口洋子,開発このような 表形式データ を、CSV ファイルから読み込み、DataGridView という新しいコントロールに表示します。
重要:この章は次章以降への橋渡し
第 23 章以降では、CSV ファイルの代わりに SQLServer からデータを取得して同じく
DataGridViewに表示します。 CSV と DB は「データの取得元」が違うだけで、画面表示の仕組み(DataTableを介してDataGridViewに出す部分)はほぼ共通 です。 第 17 章で学んだSqlConnection/SqlCommandを、ここで身に付けるDataTable/DataGridViewと組み合わせるのが、次章以降の Windows フォーム社員管理アプリです。
書籍に手順がすべて書かれているので、書籍を手元に開いて手を動かしながら進めてください。 本テキストでは、次章以降の SQLServer 連携につながる視点で補足を入れます。
この章で使用する書籍範囲
Section titled “この章で使用する書籍範囲”| 範囲 | 内容 |
|---|---|
| Chapter 7.1 | 「CSV の読み書きアプリ」の作成(CsvReadWrite) |
この章でできるようになること
Section titled “この章でできるようになること”この章を終えると、次のことができるようになります。
- CSV ファイルがどんな形式かを説明できる
DataGridViewコントロールを画面に配置できるDataTableの役割を説明できる(表形式データの「入れ物」)- CSV →
DataTable→DataGridViewの流れを説明できる DataGridView.DataSourceにデータを紐づけられるOpenFileDialog・SaveFileDialogの存在と役割を知っている- NuGet で
Csvライブラリを追加できる - 次章以降の SQLServer 連携との対応関係 を説明できる
本章で使用する環境
Section titled “本章で使用する環境”| 項目 | 内容 |
|---|---|
| 開発環境 | Visual Studio 2022 |
| プロジェクト種類 | Windows フォーム アプリ |
| 対象フレームワーク | .NET 8 |
| プロジェクト名 | CsvReadWrite(書籍と合わせる) |
| 追加 NuGet パッケージ | Csv(書籍 7.1 で指示あり) |
csproj の Nullable は disable に変更してください(第 1 章「1-1」参照)
作業前チェック
Section titled “作業前チェック”- 第 21 章を Git に提出済みである
- 書籍 Chapter 7.1 のページを開ける状態である
- NuGet でパッケージを追加できる(第 17 章で
Microsoft.Data.SqlClientを追加した経験あり)
22-1 CSV ファイルとは
Section titled “22-1 CSV ファイルとは”CSV は Comma-Separated Values の略で、カンマで区切られた表形式のテキストファイル です。
社員ID,社員名,部署名1001,山田二郎,総務1002,佐藤昭夫,営業1003,山口洋子,開発このテキストを表として見ると:
| 社員ID | 社員名 | 部署名 |
|---|---|---|
| 1001 | 山田二郎 | 総務 |
| 1002 | 佐藤昭夫 | 営業 |
| 1003 | 山口洋子 | 開発 |
1 行目を ヘッダー行(列名)、2 行目以降を データ行 として扱うのが一般的です。 Excel でも開ける汎用フォーマットなので、システム間でデータを受け渡しする形式としてよく使われます。
22-2 DataGridView コントロール
Section titled “22-2 DataGridView コントロール”DataGridView は、表形式のデータを画面に表示する ためのコントロールです。
今まで使ってきた Label・TextBox・Button などと同じく、ツールボックスから配置します。
| 用途例 | 内容 |
|---|---|
| 社員一覧の表示 | 全社員を行に並べて表示 |
| 検索結果の表示 | SQL の SELECT 結果や CSV の中身 |
| 編集可能な表 | セルを直接編集する画面 |
次章以降で扱う SQLServer の SELECT 結果も、DataTable 経由で DataGridView に表示できます。
DataGridView は Forms 編の主役級コントロール です。
22-3 DataTable は表形式データの「入れ物」
Section titled “22-3 DataTable は表形式データの「入れ物」”DataTable は、プログラムの中で表形式データを扱うための汎用クラス です。列と行の集まりとして表を表現でき、DataGridView の DataSource に直接代入できる点が特徴です。
この章では、CSV ファイルから読み込んだデータ を DataTable に詰めて、DataGridView に表示します。
CSV ファイル SQLServer(次章以降) ↓ ファイル読み込み ↓ SELECT + DataReader DataTable ← 表形式の入れ物 ↓ DataSource に設定 DataGridView ← 画面の表DataTable は「データの入れ物」、DataGridView は「画面の表」 と覚えましょう。
入れ物と表示部品が分かれているおかげで、データ源が CSV でも DB でも、同じ画面で扱えます。
22-4 CsvReadWrite アプリの全体像
Section titled “22-4 CsvReadWrite アプリの全体像”書籍 7.1 で作る CsvReadWrite の流れを、研修向けに整理します。
具体的な配置・手順は書籍を参照 してください。
| コントロール | 役割 |
|---|---|
TextBox(入力 CSV ファイル名) | 読み込み対象のファイルパスを表示 |
Button(CSV 取得) | クリックでファイル選択 → 読み込み |
DataGridView | 読み込んだ CSV 内容を表として表示 |
Button(CSV 出力) | クリックでファイル名を選択 → 保存 |
TextBox(出力 CSV ファイル名) | 保存先のファイルパスを表示 |
OpenFileDialog(非表示) | ファイル選択ダイアログ |
SaveFileDialog(非表示) | ファイル保存ダイアログ |
OpenFileDialog と SaveFileDialog は、Timer と同じく 画面に表示されないコンポーネント(第 20 章)です。
ツールボックスから配置すると、コンポーネントトレイに置かれます。
読み込み(buttonCsvRead_Click):
1. openFileDialogCsv.ShowDialog() でファイル選択ダイアログを表示2. ユーザーが OK を押したら、選択されたファイル名を取得3. File.ReadAllText でファイル内容を文字列として読み込む(UTF-16)4. CsvReader.ReadFromText で行ごとに分解5. ヘッダー行から DataTable の列を作る6. データ行を DataTable.Rows.Add で追加7. DataGridView.DataSource = dataTable で画面に表示保存(buttonCsvWrite_Click):
1. saveFileDialogCsv.ShowDialog() で保存先ダイアログを表示2. ユーザーが OK を押したら、保存先ファイル名を取得3. DataTable から列名(header)とデータ(newLine)を取り出す4. CsvWriter.WriteToText で CSV 文字列を組み立てる5. File.WriteAllText でファイルに保存(UTF-16)具体的なコードは書籍 7.1 を参照してください。
22-5 研修固有の補足(深入りしないポイント)
Section titled “22-5 研修固有の補足(深入りしないポイント)”書籍 7.1 のサンプルには、研修の現段階では 深追いしなくてよい部分 があります。 理解できる範囲で確認しつつ、深入りせずに先へ進んで構いません。
| 部分 | 説明 | 研修での扱い |
|---|---|---|
using Csv; | NuGet ライブラリの名前空間 | NuGet で追加すれば使える、と覚える |
Encoding.GetEncoding("utf-16") | 文字コード指定(日本語対応) | 「日本語を扱うのに必要」程度で OK |
string[][] newLine = ... | 二次元配列で CSV を組み立て | 書籍のコードを実行する範囲で OK |
CsvReader.ReadFromText | 外部ライブラリのメソッド | ライブラリの使い方は書籍を参照 |
C# の基本(int、string、メソッド、DataTable)は理解できるはずです。
ライブラリ固有の細かい使い方 は、必要になったときに調べられればよい、というスタンスで進めましょう。
22-6 DataTable と List<T> の使い分け
Section titled “22-6 DataTable と List<T> の使い分け”表形式データの扱いには、DataTable と List<T> の 2 つのアプローチがあります。
| 方法 | データの形 | 強み |
|---|---|---|
DataTable(この章) | 表として扱う | DataGridView への表示が簡単、列構造が動的でも対応可 |
List<Employee> | クラスの集まりで扱う | LINQ で操作しやすい、ロジックを書きやすい(第 12 章を参照) |
どちらにも長所があります。
画面に「ぱっと表示する」だけなら → DataTableロジックで絞り込み・並び替え・集計 → List<Employee>DataGridView に表示する → どちらでも可書籍 7.1 では DataTable を使う形になっています。
本研修の後半(第 23 章以降)では、両方の使い方をシーンに応じて使い分けます。
22-7 次章以降の DB 連携への橋渡し
Section titled “22-7 次章以降の DB 連携への橋渡し”この章で扱う CSV と、次章以降の SQLServer 連携の 対応関係 を整理しておきます。
| 観点 | この章(CSV) | 次章以降(SQLServer) |
|---|---|---|
| データ源 | CSV ファイル | SQLServer の TrainingDB |
| 読み込み | File.ReadAllText + CsvReader | SqlCommand + SqlDataReader |
| 入れ物 | DataTable | DataTable(または List<Employee>) |
| 画面表示 | DataGridView.DataSource | 同じく DataGridView.DataSource |
| エラー | ファイル不存在・形式不正 | 接続失敗・SQL エラー(SqlException) |
| 保存 | File.WriteAllText + CsvWriter | INSERT / UPDATE / DELETE(第25章) |
画面表示の仕組みは CSV でも DB でも同じ であることが分かります。
この章で DataGridView への表示パターンを身に付けておくと、次章以降の SQLServer 連携がスムーズに入ります。
よくあるつまずき
Section titled “よくあるつまずき”| つまずき | 原因 | 対応 |
|---|---|---|
using Csv; で赤波線 | NuGet パッケージ未追加 | Csv パッケージを NuGet で追加 |
| 日本語が文字化けする | 文字コードが合っていない | 書籍どおり Encoding.GetEncoding("utf-16") を使う |
DataGridView に何も表示されない | DataSource への代入が抜けている | dataGridViewCsv.DataSource = dataTable; を確認 |
| 2 回目の読み込みで列が増える | 前回の Columns が残っている | dataTable.Columns.Clear() / dataTable.Clear() を入れる(書籍どおり) |
| ファイル選択ダイアログが出ない | ShowDialog() を呼んでいない | if (openFileDialogCsv.ShowDialog() == DialogResult.OK) { ... } |
OpenFileDialog/SaveFileDialog が画面に見えない | 画面に表示されないコンポーネント | コンポーネントトレイにあれば OK(第 20 章 Timer と同様) |
| 列の順番がおかしい | CSV ヘッダーの順序と一致 | CSV のヘッダー行を確認 |
学んだことチェック
Section titled “学んだことチェック”- CSV ファイルの形式(カンマ区切り、ヘッダー行とデータ行)を説明できる
-
DataGridViewを画面に配置できる -
DataTableの役割を説明できる - CSV →
DataTable→DataGridViewの流れを説明できる -
DataGridView.DataSourceにDataTableを設定して表示できる -
OpenFileDialog・SaveFileDialogがコンポーネントトレイに置かれることを説明できる - NuGet で
Csvパッケージを追加できた - CSV からの読み込みと、次章以降の DB からの取得とで、
DataTableの役割が共通であることを説明できる
研修の進め方によっては、隣の人またはチーム内で説明確認を行います。
次の内容を、自分の言葉で説明してください。
- CSV ファイルとは何ですか。
DataGridViewは何のためのコントロールですか。DataTableの役割は何ですか。- CSV を
DataGridViewに表示するまでの流れを、3 ステップで説明してください。 OpenFileDialogが画面に表示されないのはなぜですか。- この章で学んだことは、次章以降の SQLServer 連携とどうつながりますか。
この章の演習課題に取り組みます。
制限時間は 120 分 です。
書籍 Chapter 7.1 を参照しながら作業します。 画面操作・コードの細かな手順は書籍に書かれているので、書籍を手元に開いて進めてください。
課題 22-1 書籍 Chapter 7.1 を参照して CsvReadWrite アプリを完成させる
Section titled “課題 22-1 書籍 Chapter 7.1 を参照して CsvReadWrite アプリを完成させる”書籍 7.1 を参照して、CsvReadWrite プロジェクトを完成させてください。
仕様(書籍と同じ)
- プロジェクト名:
CsvReadWrite - NuGet で
Csvパッケージを追加 - フォームに次のコントロールを配置:
TextBox(入力 CSV ファイル名)Button(CSV 取得)DataGridView(Name:dataGridViewCsv)Button(CSV 出力)TextBox(出力 CSV ファイル名)OpenFileDialog、SaveFileDialog
- 「CSV 取得」ボタン:ダイアログでファイル選択 →
DataGridViewに内容を表示 - 「CSV 出力」ボタン:ダイアログで保存先指定 →
DataGridViewの内容を CSV に保存
動作確認用 CSV(あらかじめテキストエディタで作成)
社員ID,社員名,部署名1001,山田二郎,総務1002,佐藤昭夫,営業1003,山口洋子,開発1004,田中浩介,マーケティング1005,加藤昭彦,品質管理ファイル名は employees.csv などにして、UTF-16 で保存してください(書籍の指示に従う)。
確認すること
- CSV を読み込んで
DataGridViewに表示できる - 別ファイルとして CSV を保存できる
- csproj が
<Nullable>disable</Nullable>
課題 22-2 CSV・DataTable・DataGridView の関係をコードで追う
Section titled “課題 22-2 CSV・DataTable・DataGridView の関係をコードで追う”完成した CsvReadWrite のコードを開いて、DataTable がどのように使われているか を確認してください。
確認の手順
buttonCsvRead_Clickメソッドを開くDataTableの 列(Columns)が追加されている行を探すDataTableの 行(Rows)が追加されている行を探すdataGridViewCsv.DataSource = dataTable;の行を探す- それぞれの行の役割を、自分の言葉で説明できるようにする
おすすめ:第 21 章のデバッグ操作で動きを観察
- 各処理の前後にブレークポイントを置く
- ステップ実行で
dataTable.Columns.Count・dataTable.Rows.Countの変化を観察 - どのタイミングで
DataGridViewに表示されるかを目で見る
確認すること
-
DataTableの列追加・行追加の処理場所が分かる -
DataSourceへの代入で表示が更新されることを確認した - 次章以降で扱う DB からの取得と、この章の CSV からの取得との共通点を説明できる
課題 22-3 不完全な CSV でアプリの動きを観察する
Section titled “課題 22-3 不完全な CSV でアプリの動きを観察する”意図的に 不完全な CSV ファイル を用意し、アプリの挙動を観察してください。 原因と対応案を自分で考えます。
試してほしいパターン(どれか 2 つ以上)
| 不完全パターン | 例 |
|---|---|
| ヘッダーがない | 1 行目からいきなりデータ |
| 列数が足りない行 | 一部の行のカンマ数が少ない |
| 空行が混じる | データ行の間に空行 |
| ファイルが存在しない | 削除した状態で「取得」ボタン |
| 文字コードが違う | UTF-8 で保存した CSV |
確認すること
- どのような表示や例外が出るかを観察できた
- エラーの原因を自分の言葉で説明できる
- 第 15 章の
try-catchを使ってアプリが落ちないようにできる(コードの追加は任意)
補足
実務では「読み込むファイルが常に正しいとは限らない」のが普通です。 エラー時の挙動を意識しておくことが大切です(細かな対応は後の章でも扱います)。
課題 22-4 CSV から DB への置き換えを構想する(座学)
Section titled “課題 22-4 CSV から DB への置き換えを構想する(座学)”次章以降では、CSV ファイルの代わりに SQLServer の TrainingDB からデータを取得して DataGridView に表示します。
具体的なコードを書く前に、どこをどう置き換えればよいか を考えてみてください。
考えるテンプレート
| この章で書いた処理 | DB 版で何に置き換える? |
|---|---|
File.ReadAllText(...) | (例:SqlConnection.Open() + ?) |
CsvReader.ReadFromText(...) | (例:?) |
dataTable.Columns.Add(...) で列追加 | (例:?) |
dataTable.Rows.Add(...) で行追加 | (例:?) |
dataGridViewCsv.DataSource = dataTable; | (例:?) |
File.WriteAllText(...)(CSV 保存) | (例:?) |
ヒント:第 17 章で学んだ DB アクセスを思い出す
SqlConnection/SqlCommand/SqlDataReader/DataTable.Load- 第 17 章では
ExecuteScalarで 1 つの値を取得したが、複数行を取りたい場合はExecuteReaderを使う
確認すること
- CSV と DB の対応関係を表で書ける
- 「画面表示の仕組み(
DataGridView部分)はほぼ同じ」と説明できる - 第 17 章で学んだ DB アクセスの知識が、次章以降でどう活きるかを想像できる
この課題はコードを書きません。 次章以降に何を作るか をイメージするのが目的です。
提出前チェックリスト
Section titled “提出前チェックリスト”- プロジェクト名が
CsvReadWrite - csproj が
<Nullable>disable</Nullable> -
CsvNuGet パッケージが追加されている - CSV 読み込み →
DataGridView表示が動く - CSV 保存ができる
- 動作確認用の CSV ファイル(
employees.csvなど)を用意した -
bin・obj・.vsフォルダが Git 管理に入っていない - CSV ファイル自体を Git に含めるかは講師の指示に従う
Git への提出
Section titled “Git への提出”git statusgit add .git commit -m "第22章 CSV読み書きとDataGridView"git pushGit の詳しい操作は、付録 C「Git のインストールと提出ルール」 を参照してください。
この章のまとめ
Section titled “この章のまとめ”- CSV は カンマ区切り で表形式データを表すテキストファイル
DataGridViewは 表形式データを画面に表示する ためのコントロールDataTableは プログラム内で表形式データを扱う入れ物(第 17 章と共通)- 流れ:CSV →
DataTable→DataGridView DataGridView.DataSource = dataTable;で画面に表が表示されるOpenFileDialog・SaveFileDialogは画面に表示されないコンポーネント- NuGet
Csvライブラリを使うと CSV を扱いやすくなる - 画面表示の仕組み(
DataGridView)は、データ源が CSV でも DB でも共通
次章からは、本研修オリジナルのコンテンツに入ります。
第 23 章では、この章で作った CSV アプリのデータ源を SQLServer の TrainingDB に置き換える 形で、Windows フォーム社員管理アプリの一覧表示を作ります。
第 17 章で学んだ SqlConnection・SqlCommand に、本章で身に付けた DataTable と DataGridView を組み合わせて、employees テーブルの内容を画面に表示します。
「画面の見た目はほぼ同じ、データ源が CSV から DB に変わるだけ」── これがインターフェイス(第 14 章)で学んだ 実装の差し替え の考え方の実演でもあります。