在我的表单上,我设置了2个字段。项目和子区域的位置。我试图根据用户选择的位置填充子区域字段。例如,他们选择“位置4”。该位置的唯一3个子区域,例如A,B和C.在位置框中选择后,子区域框将仅显示A,B和C.我拥有所有位置并允许名为appsettings.xml的xml文件中的子区域。如何让程序读入xml文件并允许子区域字段仅填充有效数据?下面是我如何设置xml文件的示例。
<?xml version="1.0" encoding="utf-8" ?>
<MerchandiseTrack>
<Merchandise_Zones Application_Data="Test-Run">
<KeyBoard_App>
<AppString>c windows osk.exe</AppString>
</KeyBoard_App>
<Storage_Location>
<head id="Location"> // Name of box on app
<body id="04"> // Name of Location within the box
<Sub-Area>A, B, C,</Sub-Area> // Allowed sub-areas
</body>
</head>
<head id="Location"> // Name of box on app
<body id="05"> //Name of Location within the box
<Sub-Area>P, L, R, B</Sub-Area> // Allowed sub-areas
</body>
</head>
<head id="Location"> // Name of box on app
<body id="14"> //Name of Location within the box
<Sub-Area>A, X, C </Sub-Area> //Name of Location within the box
</body>
</head>
</Storage_Location>
</Merchandise_Zones>
</MerchandiseTrack>
答案 0 :(得分:1)
您在SelectedIndexChanged
上设置了一个活动。然后,您读取locationID并从文件中选择节点:
XmlDocument doc = new XmlDocument();
doc.Load(@"path/to/file.xml");
XmlNode subarea = doc.SelectSingleNode("/MerchandiseTrack/Merchandise_Zones/Storage_Location/head/body[@id=" + locationComboBox.SelectedItem.ToString()+ "]/Sub-Area");
string[] areas = subarea.InnerText.Split(',');
foreach (string area in areas)
{
subAreaComboBox.Items.Add(area);
}
这包括你没有(!)在你的列表上有一个逗号(就像你现在的第一个位置一样。如果有,你必须扩展代码才能删除它。
答案 1 :(得分:0)
涉及很多步骤。我使用XDocument.Load
加载文档,然后你需要将它绑定到UI。如果使用WPF,ItemsControl的一些衍生物来输入值,但是你提到TextBoxes的事实是值得注意的。在ASP.NET中更是如此,因为所有控件都需要重新创建,给定相同的ID并在加载ViewState时重新添加到页面以便您访问它们。
绑定/重新创建它们时,关键是确保所有ID / Name属性保持不变。
我个人的经验一直是WPF中的动态控件很小巧,但在ASP.NET中很难正常工作。