私は完全に有効であると信じている次のXMLを持っています:
<Controls>
<ComboBox>
<ControlName>cbInputType</ControlName>
<ControlText>Input Type</ControlText>
<EnumDefault>2</EnumDefault>
<EnumList value="0">
<EnumText>Type A</EnumText>
<EnumLegend>TA</EnumLegend>
</EnumList>
<EnumList value="1">
<EnumText>Type B</EnumText>
<EnumLegend>TB</EnumLegend>
</EnumList>
<EnumList value="2">
<EnumText>Type C</EnumText>
<EnumLegend>TC</EnumLegend>
</EnumList>
</ComboBox>
<ComboBox>
<ControlName>cbDecimalPlace</ControlName>
<ControlText>Decimal Place</ControlText>
<EnumDefault>1</EnumDefault>
<EnumList value="0">
<EnumText>0dp (1234)</EnumText>
<EnumLegend>0000</EnumLegend>
</EnumList>
<EnumList value="1">
<EnumText>1dp (123.4)</EnumText>
<EnumLegend>000.0</EnumLegend>
</EnumList>
</ComboBox>
</Controls>
2 つの「ComboBox」コントロールに含まれるものを指定するという考え方です。XML で EnumList 定義を使用すると、最初の ComboBox に 3 つの項目 (タイプ A、タイプ B、およびタイプ C) が定義され、2 番目の ComboBox に 2 つの項目 (0dp および 1dp) が入力されます。ReadXml メソッドを使用して XML をデータセットに読み込みます。
ここで質問があります。データセット内のテーブルにアクセスできますが、それぞれの初期データを正しく含む ComboBox テーブルにアクセスすると、その中に EnumList がありません。テーブル EnumList にもアクセスできますが、これにはファイル内のすべての列挙が含まれているため、特定の ComboBox インスタンスに関連付けられているようには見えません。
問題の一部は、データを正しく読み取っていないだけかもしれません。私は基本的にやっています:
DataSet ds = ReadXML("myxmltable.xml");
DataTable dt = ds.Tables["ComboBox"];
dataGridView1.DataSource = dt;
これにより、enumList ではなく、各 ComboBox 定義の最初の 3 つの項目のみで DGV が満たされます。そして、データセット オブジェクトにデバッグしようとすると、EnumLists に関する情報が表示されません。
上記の例のコードの 2 行目を次のように変更すると:
DataTable dt = ds.Tables["EnumList"];
ファイル全体ですべての列挙リストを取得するため、それらがどのコンボボックスに関連しているかを確認できません。
私が定義したように ReadXML 関数が構造を平坦化するとは信じられません。これは XML のポイントを無効にするためです。
何か案は?