XMLファイルを DataGridView に表示する方法はネット上にも溢れていますが、表示中の DataGridView をXMLファイルに反映させる方法が見当たらなかったので、次回のために備忘録を作成しています。
Excel → XML
エクセル(Excel)からデータを取り込んでDataGridViewやXMLファイルに変換する方法は過去の記事でも載せているとおり『ExcelDataReader』(エクセルデータリーダー)を使います。
XML → DataGridView
XMLファイルはデータを保管し、素早く処理する方法として優れています。
データテーブル(DataTable)をつくり、XMLファイル・Schemaファイルと紐づけることで、より扱いやすくなります。
DataSet ds_Sample = new DataSet();
System.Data.DataTable dt_ExTable = new System.Data.DataTable();
dt_ExTable.TableName = "tn_Temporary";
ds_Sample.Tables.Add(dt_ExTable);
dt_ExTable.ReadXmlSchema(XSD_File_Name);
dt_ExTable.ReadXml(XML_File_Name);
dataGridView1.DataSource = dt_ExTable;
上記コードではデータセット・データテーブルにXMLファイルを紐づけ(Read)したのち、そのデータテーブルとデータグリッドビュー(DataGridView)を紐づけています。
この方法で紐づけることで、100万レコードあるXMLファイルでも、30秒もかからずにDataGridViewに表示できます。
DataGridView → XML
本題のデータグリッドビュー(DataGridView)からXMLファイルへの変換ですが、『System.Data.DataTable』を使って書き込みます。
DataSet ds_Sample = new DataSet();
System.Data.DataTable dt_ExTable = new System.Data.DataTable();
dt_ExTable.TableName = "tn_Temporary";
ds_Sample.Tables.Add(dt_ExTable);
dt_ExTable = (System.Data.DataTable)dataGridView1.DataSource;
dt_ExTable.WriteXml(XML_File_Name);
一旦はC#プログラム上でデータテーブルにデータグリッドビューのデータを移したあとで、そのデータテーブルをXMLファイルに書き込んで完了です。
処理するタイミング
DataGridView の Edit Mode は EditOnKeystrokeOrF2 にしています。モードは何でも良いのですが、DataGridView が編集可能である必要があります。
これを記録するタイミングは、編集の都度記録することもできますが、レコード数が多いと処理が進まなくなるので、ユーザーがタイミングを決定できた方が良いと思います。
データ量が少ない場合や、記録を忘れると困るような場合はフォーカスしているセルが変更されたときなどに記録するようにします。
筆者はボタンを押したときに処理されるようにしています。
おわりに
今回は、難題であったデータグリッドビューのデータをXMLファイルに書き込む処理をしました。
過去のプログラムを見ると3年以上前には実装してあったのですが、滅多に使わないので忘れてしまいます。ここに備忘録として残すことにしました。
関連記事
- [C#備忘録]DataGridViewをXMLファイルへ反映 | AmpiTa Project
- [C#備忘録]XML・DataTable絞込・指示 | AmpiTa Project
- [C#備忘録]複数のNumericUpDownから最適値を探す | AmpiTa Project
- [備忘録]PHP7.4⇒8.0 アップ … ウェブページのデータベース接続構文を変更 | AmpiTa Project
- [C#備忘録]高DPIへの対応(目標未達) | AmpiTa Project
- [C#備忘録]HTMLファイルでレポート | AmpiTa Project
- [C#備忘録]画像ファイル出力 | AmpiTa Project
- [C#備忘録]Excelファイルをインポート | AmpiTa Project
- [C#備忘録]XMLファイルで集計 | AmpiTa Project
- [C#備忘録]定型化のためのGroupBox利用とTextBox配置 | AmpiTa Project