C#のプロジェクトへ型付きDataSetを追加し、定義したDataTableへXMLファイルを読み込みます。
読み込むXMLファイルは以下の通り。

XMLファイルには家電に関する情報を格納し、「炊飯器」、「冷蔵庫」、「レンジ」の簡単な仕様を定義します。
「炊飯器」、「冷蔵庫」、「レンジ」は各々1つのテーブルを表すことになります。
例えば、炊飯器には「メーカー」、「省エネ基準達成率」、「年間電気代」、「重さ」の列が存在し、3つの行が定義されている状態で、DataSetはDataTableの集合を持つため、これが1つのDataTableと関連付くことになります。
DataTableとの関連付けは該当するXML内のタグ名と、DataTableのテーブル名及び列名を同じにすることで自動で行われます。
では、実践してみましょう。
Visual Studioで新規のWindowsフォームアプリケーションのプロジェクトを作成します。
ここでは、プロジェクト名を「DataSetSample01」とします。

フォームのデザイナを表示させている状態でツールボックスの「データ」カテゴリを展開するとDataSetが存在します。
これをフォーム上にドラッグすることで"DataSetをコンポーネントとして"配置することが可能となります。

しかし今回は"型付きDataSet"を使用するので別手順を踏みます。
ソリューションエクスプローラからDataSetSample01(プロジェクト名)を右クリックし、「追加」→「新しい項目」を選択します。

項目内から「データセット」を選択し、名前を「HomeApplianceDataSet.xsd」とし「追加」をクリックします。

Visual Studioの画面上に追加したDataSetのデザイナが表示されます。

ツールボックスを開くと、DataSetに配置可能なコントロールが表示されます。

今回は「炊飯器」、「冷蔵庫」、「レンジ」用のテーブルを作成する必要があるため、DataTableをデザイナにドラッグしDataSetにDataTableを配置します。
これを3回行い、3つのDataTableを配置します。
配置したDataTableのテーブル名を設定します。
デザイナ上からDataTableを選択し、プロパティを開いてNameプロパティを「炊飯器」に変更します。

DataTableのテーブル名が「炊飯器」になります。

同じ要領で残りのDataTableのテーブル名を「冷蔵庫」と「レンジ」に変更します。
これで、XML内のテーブルに該当する要素名とDataTableのテーブル名が同じとなり関連付けができました。
次は各家電の項目(炊飯器の「メーカー」や「重さ」など)をDataTableの列名と関連付けます。
DataTableを右クリックし、「追加」→「列」を選択します。

DataTableに列が追加されます。

同じ要領で全家電の全項目をDataTableに列として追加していきます。

これで、XML内の各家電の項目に該当する要素名とDataTableの列名も同じとなり関連付けが完了しました。
尚、追加したDataTableの列を選択してプロパティを開き、DataTypeプロパティでStringやInt32など列の型を指定することができます。

UI上でテーブルの構成を作成し、型の指定も行えるのが"型付きDataSet"になります。
後は作成した"型付きDataSet"にXMLファイルを読み込み、フォーム上に表示させます。
フォームのデザイナを開き、ツールボックスからDataGridViewをフォームにドラッグして配置します。
DataGridViewを選択してプロパティを開き、Dockプロパティを「Fill」に設定します。

次は以下のようにコードを記述します。

フォームのロードイベントでDataSetのReadXmlメソッドにXMLファイルのパスを指定することで、関連付けられたテーブルと列に自動でXML内の値が設定されます。
後はDataTableをDataGridViewにバインドしているだけです。
ここでは、「炊飯器」テーブルをバインドしています。

尚、"型付きDataSet"ではテーブルの各列へアクセスするためのプロパティも自動で生成されており、炊飯器の「年間電気代」にアクセスしたければ、以下のようにコード上からアクセスできます。
ds.炊飯器.年間電気代
このように、DataSetへXMLファイルを読み込ませるのはds.ReadXml(~)を行っている1行だけであり、各テーブル、各列へもデザイナ上で設定した名前のままアクセスができるので非常に便利です。
※今回はわかりやすくするため、XMLの項目名やテーブル及び列名などは日本語にしました。
読み込むXMLファイルは以下の通り。

XMLファイルには家電に関する情報を格納し、「炊飯器」、「冷蔵庫」、「レンジ」の簡単な仕様を定義します。
「炊飯器」、「冷蔵庫」、「レンジ」は各々1つのテーブルを表すことになります。
例えば、炊飯器には「メーカー」、「省エネ基準達成率」、「年間電気代」、「重さ」の列が存在し、3つの行が定義されている状態で、DataSetはDataTableの集合を持つため、これが1つのDataTableと関連付くことになります。
DataTableとの関連付けは該当するXML内のタグ名と、DataTableのテーブル名及び列名を同じにすることで自動で行われます。
では、実践してみましょう。
Visual Studioで新規のWindowsフォームアプリケーションのプロジェクトを作成します。
ここでは、プロジェクト名を「DataSetSample01」とします。

フォームのデザイナを表示させている状態でツールボックスの「データ」カテゴリを展開するとDataSetが存在します。
これをフォーム上にドラッグすることで"DataSetをコンポーネントとして"配置することが可能となります。

しかし今回は"型付きDataSet"を使用するので別手順を踏みます。
ソリューションエクスプローラからDataSetSample01(プロジェクト名)を右クリックし、「追加」→「新しい項目」を選択します。

項目内から「データセット」を選択し、名前を「HomeApplianceDataSet.xsd」とし「追加」をクリックします。

Visual Studioの画面上に追加したDataSetのデザイナが表示されます。

ツールボックスを開くと、DataSetに配置可能なコントロールが表示されます。

今回は「炊飯器」、「冷蔵庫」、「レンジ」用のテーブルを作成する必要があるため、DataTableをデザイナにドラッグしDataSetにDataTableを配置します。
これを3回行い、3つのDataTableを配置します。
配置したDataTableのテーブル名を設定します。
デザイナ上からDataTableを選択し、プロパティを開いてNameプロパティを「炊飯器」に変更します。

DataTableのテーブル名が「炊飯器」になります。

同じ要領で残りのDataTableのテーブル名を「冷蔵庫」と「レンジ」に変更します。
これで、XML内のテーブルに該当する要素名とDataTableのテーブル名が同じとなり関連付けができました。
次は各家電の項目(炊飯器の「メーカー」や「重さ」など)をDataTableの列名と関連付けます。
DataTableを右クリックし、「追加」→「列」を選択します。

DataTableに列が追加されます。

同じ要領で全家電の全項目をDataTableに列として追加していきます。

これで、XML内の各家電の項目に該当する要素名とDataTableの列名も同じとなり関連付けが完了しました。
尚、追加したDataTableの列を選択してプロパティを開き、DataTypeプロパティでStringやInt32など列の型を指定することができます。

UI上でテーブルの構成を作成し、型の指定も行えるのが"型付きDataSet"になります。
後は作成した"型付きDataSet"にXMLファイルを読み込み、フォーム上に表示させます。
フォームのデザイナを開き、ツールボックスからDataGridViewをフォームにドラッグして配置します。
DataGridViewを選択してプロパティを開き、Dockプロパティを「Fill」に設定します。

次は以下のようにコードを記述します。

フォームのロードイベントでDataSetのReadXmlメソッドにXMLファイルのパスを指定することで、関連付けられたテーブルと列に自動でXML内の値が設定されます。
後はDataTableをDataGridViewにバインドしているだけです。
ここでは、「炊飯器」テーブルをバインドしています。

尚、"型付きDataSet"ではテーブルの各列へアクセスするためのプロパティも自動で生成されており、炊飯器の「年間電気代」にアクセスしたければ、以下のようにコード上からアクセスできます。
ds.炊飯器.年間電気代
このように、DataSetへXMLファイルを読み込ませるのはds.ReadXml(~)を行っている1行だけであり、各テーブル、各列へもデザイナ上で設定した名前のままアクセスができるので非常に便利です。
※今回はわかりやすくするため、XMLの項目名やテーブル及び列名などは日本語にしました。
スポンサーサイト
« CSVを読み込みDataTableへ展開する
| ホーム |
| ホーム |