2014-03-24 40 views
0

我正在創建一個調查應用程序,並且無法從我寫入的XML文件中讀取,以便在我的飛濺形式和實際問題中顯示啓動文本調查表格。如何從XML中讀取並在Winform中顯示文本框和標籤

我在XML中編寫問題和答案,以便通過簡單地創建不同的XML並從中讀取而不是硬編碼問題和答案來重用程序。這裏是我的XML結構:

<questions> 
    <splashText> 
     <text>Splash text displaying information and purpose of the survey goes here</text> 
    </splashText> 

<question> 
    <type>ComboBoxControl</type> 
    <text>Blah blah blah?</text> 
    <choices> 
     <choice>Answer 1</choice> 
     <choice default="true">Answer 2</choice> 
     <choice>Answer 3</choice> 
     <choice>Answer 4</choice> 
    </choices> 
    <Required>true</Required> 
</question> 
.. 
.. 
</questions> 

我怎樣才能讓我的程序,從我的XML閱讀並把濺文本我飛濺窗體上的文本框?

+0

改爲使用WPF。它在你想要的數據綁定方面要好得多。使用WinForm你必須手動完成。 – Aron

+0

另外。考慮使用DataContractSerializer進行xml的序列化。 – Aron

+0

嘿阿隆,謝謝你的回覆。我將盡快開始使用WPF的另一個項目,但我希望能夠通過這兩種方式來完成。這個問題更多的是幫助我理解這些概念,並且看看如何以這種特定的方式來完成。 – Mkalafut

回答

1

不可否認,我沒有測試過這個,但是一些健康的調試可能會指出你的解析代碼是有缺陷的。我認爲這可能會解決它,但是您應該在調試時立即查看您的XDocument查詢,以查看您是否獲得了您期望的結果。

var xDocument = XDocument.Load(@"C:\Users\..\Survey.xml"); 

var questionList = xDocument 
         .Element("questions") 
         .Elements("question") 
         .Select(elem => new Questions 
     { 
      QuestionType = elem.Element("type").Value, 
      QuestionText = elem.Element("text").Value, 
      SplashScreenText = elem.Element("splashText").Value, 
      Choices = elem.Element("choices").Elements("choice").Select(ch => 
        new Choice 
        { 
         AnswerChoice = ch.Value 
        }).ToArray() 
     }).ToList(); 

編輯: 當然,服用第二次看,我注意到你的WinForms代碼永遠不會調用的XMLParser的,並且XMLParser的是不實際的問題返回對象的列表。你需要這樣做才能顯示任何內容。

+0

我來看看Domenic。我意識到這是有缺陷的,這就是爲什麼我在這裏發佈。我從來沒有這樣做過,我認爲這將是獲得有關該主題知識的絕佳地點。 – Mkalafut

+0

當然......當我第一次看時,似乎很明顯,有一個解析漏洞,但後來我發現了更多的問題。我相信,一旦您深入瞭解失敗的位置,您可能會得出更精確的問題。 – DomenicDatti

+0

再次感謝。我對XML非常陌生,這是我第一個直接使用它的項目。我意識到,我忘了我的實際飛濺形式調用分析器,但除此之外,你有什麼祕訣返回的問題清單?任何你認爲對此有幫助的鏈接都會很棒。 – Mkalafut

0

使用強類型模型而不是匿名類來讀取XML,然後使用MVP模式綁定您的UI。它會容易得多,而且會使維護變得簡單。因此,當您啓動應用程序(或者您點擊刷新按鈕)時,您將從XML文件中讀取數據,並根據讀取的內容創建模型(對象)。您可以將這些問題存儲在靜態類或單例中。

之後,從Windows窗體中,您只需訪問正確的模型並根據需要手動或使用DataBinding將其鏈接。

我在Java中做了類似的事情,這就是我解決它的方式。但是,我使用了MVC模式,但MVC和MVP非常相似。

0
  1. 如果你沒有這樣做,從用戶界面 - 註冊到splash_load事件
  2. 標籤(LBL稱呼它)加入飛濺的形式,並設置其文本時,讀者得到的飛濺文本元素。
+0

你能提供#2個例子嗎? – Mkalafut

+0

if(reader.Name ==「splashText」)後,您應該將標籤文本設置爲閱讀器的值 –

+0

難題!我只是查找了一個很好的資源,發現我發現的一些東西不見了。感謝您的協助! – Mkalafut

相關問題