1

私は完全に有効であると信じている次の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 のポイントを無効にするためです。

何か案は?

4

0 に答える 0