我有以下我认为完全有效的 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 的意义,所以我想我一定是用错了?
有任何想法吗?