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

本文关键字:选择 用户 填充 表单 字段 使用 XML 文件 | 更新日期: 2024-11-03 20:12:31

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

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

您在 SelectedIndexChanged 上设置了一个事件。然后读取位置 ID 并从文件中选择节点:

        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);
        }

这包括您的列表中没有 (!) 尾随逗号(就像您目前的第一个位置一样。如果是这样,则必须扩展代码才能将其删除。

涉及相当多的步骤。我会使用 XDocument.Load 来加载文档,然后您需要将其绑定到 UI。如果使用 WPF,则 ItemsControl 的某些派生来输入值,但您提到的文本框这一事实需要谨慎。在 ASP.NET 中也是如此,因为所有控件都需要重新创建,给定相同的 ID,并在加载 ViewState 时重新添加到页面,以便您访问它们。

绑定/重新创建它们时,关键是确保所有 ID/Name 属性保持不变。

我的个人经验一直是,WPF 中的动态控件很麻烦,但 ASP.NET 很难正常工作。