我有以下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;
这使我的DGV只填充每个ComboBox定义中的前3个项目,而不是enumList。并且尝试调试数据集对象时,我看不到有关EnumLists的任何信息。
如果我将上例中的第二行代码更改为:
DataTable dt = ds.Tables["EnumList"];
我得到了整个文件中的所有enumlists,所以我看不出它们与哪个组合框有关。
我无法相信ReadXML函数会像我定义的那样扁平化结构,因为这会破坏XML的要点,所以我想我必须使用它错误?
有什么想法吗?