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>

这个想法是它指定了两个“ComboBox”控件中包含的内容。使用 XML 中的 EnumList 定义应该使用定义的 3 个项目(类型 A、类型 B 和类型 C)填充第一个 ComboBox,并使用 2 个项目(0dp 和 1dp)填充第二个 ComboBox。我正在使用 ReadXml 方法将 XML 读入数据集。

现在的问题是:我可以访问数据集中的表,但是如果我访问正确包含每个表的初始数据的 ComboBox 表,则其中没有 EnumList。我还可以访问 EnumList 表,但它包含文件中的所有枚举,因此它们似乎与特定的 ComboBox 实例无关。

部分问题可能是我没有正确读取数据。我基本上在做:

DataSet ds = ReadXML("myxmltable.xml");
DataTable dt = ds.Tables["ComboBox"];
dataGridView1.DataSource = dt;

这只会用每个 ComboBox 定义中的前 3 个项目填充我的 DGV,而不是 enumList。并尝试调试数据集对象,我看不到有关 EnumLists 的任何信息。

如果我将上面示例中的第二行代码更改为:

DataTable dt = ds.Tables["EnumList"];

我得到了整个文件中的所有枚举列表,所以我看不到它们与哪个组合框相关。

我不敢相信 ReadXML 函数会像我定义的那样使结构变平,因为这会破坏 XML 的意义,所以我想我一定是用错了?

有任何想法吗?

4

0 回答 0