2012-07-30 200 views
0

假設我必須通過讀取XML文件來顯示錶單的詳細信息,並根據no。我想要在窗體中顯示細節的元素。是否有可能這樣做?你可以在C#中以編程方式創建表單域?

例: 說我的XML文件包含以下

<Rooms> 
    <Room> 
      <Name>A</Name> 
      <ID>1</ID> 
     </Room> 
     <Room> 
      <Name>B</Name> 
      <ID>2</ID> 
     </Room> 
</Rooms> 

我可以顯示在上面的表格細節。萬一我添加另一個房間元素到XML文件,

<Room> 
      <Name>C</Name> 
      <ID>3</ID> 
    <Room> 

我想在表單中顯示這一點。這實際上可能嗎?任何其他的選擇?

+0

另一個房間元件等Ç Shee 2012-07-30 08:44:38

+2

是。代碼如何取決於你是在談論Web還是WinForms或MVC或其他東西 – podiluska 2012-07-30 08:45:15

+1

這當然是可能的。 – ChrisF 2012-07-30 08:45:20

回答

1

您可以使用LINQ-XML解析XML文檔,準備List<T>,並顯示使用控制結果 - 像DataGridView中,ListView控件等

0

當然,這是可能的。

但最好的選擇取決於你想用它做什麼。你要編輯數據嗎?或者只是顯示它?有很多選項,你可以用網格形式顯示,或者像你建議的那樣,創建控件運行時。但是你必須知道不同的數據(標籤或文本框,也就是texbox(在ID的情況下)是隻讀的)的控制和可能的不同控制,你將如何確定這些東西?當你創建控制確保你讓它滾動弄好了,你不知道有多少數據你得到這樣的形式可以成爲無限長

對於實際創建控件,你可以檢查:http://support.microsoft.com/kb/319266

+0

我實際上做的是顯示房間ID房間名稱n然後爲用戶填充數據的組合框的面板。 – Shee 2012-07-30 09:08:44

-1

是的,它是可能的。傳統上,您會在您的Page_Init方法中循環遍歷您的aspx.cs文件和用戶代碼,類似於下面的僞代碼:

foreach(//loop specified here) { 
    Page.Form.Controls.Add(new TextBox() {Id = "Room" + loopValue}); 
} 

然後,在回帖後,您應該可以使用類似的循環訪問您的動態控件以重新構建Id。這個視頻應該更詳細地介紹這個概念。

http://www.asp.net/web-forms/videos/aspnet-ajax/how-to-dynamically-add-controls-to-a-web-page

1

我的建議 - 你的XML轉換成強類型的對象(所以Room對象與給定的屬性),你可以加載到的List<Room>的集合。

一旦你得到了,你現在有編程來添加刪除的能力等

現在,你需要你的用戶界面綁定到該信息 - 一種廉價的方式將是使用DataGridView控制 - 這,結合數據源,將自動支持編輯和添加/重新排序/刪除。

如果你想更復雜的東西,你可以創建適用於Room類型的定製用戶控件,然後也許另一個充當一堆那些容器。

我不會發布任何代碼,因爲我覺得有這麼多的選擇,你 - 你還沒有真正解釋你已經嘗試了什麼 - 這要走得更遠,最終會使得這個答案很長!希望得到我的建議 - 首先了解DataGridView,如何自定義列格式併爲其提供自定義控件 - 它將爲您提供一個完整的自定義解決方案所需的想法。