C#:使用XML文件根据用户选择填充表单字段

时间:2012-08-06 12:10:28

标签: c# xml textbox populate

在我的表单上,我设置了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>

2 个答案:

答案 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中很难正常工作。