2012-08-06 51 views
0

在我的表單中,我設置了2個字段。項目的位置和子區域。我試圖根據用戶選擇的位置填充子區域字段。例如,他們選擇「地點4」。這個位置只有3個子區域,可以說是A,B和C.在位置框中選擇後,子區域框將只顯示A,B和C.我擁有所有位置並允許一個名爲appsettings.xml的xml文件中的子區域。如何讓程序讀取xml文件並允許子區域只填充有效數據?以下是我如何設置我的xml文件的示例。C#:根據用戶選擇使用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> 

回答

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

這包括你不要有你的列表中的結尾逗號(因爲你有此刻你的第一個位置,如果是這樣的,你必須擴展代碼才能刪除它

+0

感謝您的良好開端!兩個問題:我不確定+ locationID +應該是什麼?我的代碼不會用它編譯。其次,如果你有「//寫入子區域目標」,我想直接將值放入子區域框中,那麼我需要做什麼才能將其實現到子區域框中? – 2012-08-06 12:47:18

+0

locationID是一個變量,它保存與頭節點中的id-attribute相同的值。讓我們來澄清你想要的,然後編輯我的代碼:你有兩個文本框,當你在第一個輸入「04」時,你想在第二個輸入「A,B,C」? – Jan 2012-08-06 12:51:37

+0

這是正確的!他們將選擇一個位置(從下拉框中)並根據位置選擇列表中的選項將出現在與該位置相關的子區域下拉列表中。因此,如果他們在地點下拉框中選擇「04」,子區域「A,B,C」只會出現在子區域下拉框中 – 2012-08-06 12:54:41

0

這裏有一些公平的步驟,我使用XDocument.Load來加載文檔,然後你需要將它綁定到UI,如果使用WPF,一些ItemsControl的衍生物來輸入值,但是你提到TextBoxes的事實是值得警惕的,在ASP.NET中同樣如此,因爲所有的控件都需要重新創建,給定相同的ID並重新添加到頁面中同時加載ViewState以便交流塞住他們。

當你綁定/重新創建它們時,關鍵是確保所有的ID/Name屬性保持不變。

我個人的經驗一直是WPF中的動態控件很小,但在ASP.NET中很難正常工作。

相關問題