2012-03-12 34 views
0

主要問題在於此。無法從WPF中的XML中向ListView添加項目

我有2個XML包含有關我公司的信息。一個被認爲是模板XML,您可以在其中找到一般信息,另一個是包含關於每個單獨設備的信息的目錄,其中包含對模板XML的引用。

他們看起來像這樣 目錄XML

<list> 
    <A> 
     <B> 
     <c>reference to template</c> 
     <d>info 2</d> 
     <e>info 3</e> 
     <f>info 4</f> 
     <g> 
      <h>info5</h> 
      <i>info5</i> 
     </g> 
     </B> 
     <B> 
     <c>reference to template</c> 
     <d>info a</d> 
     <e>info s</e> 
     <f>info d</f> 
     <g> 
      <h>infof</h> 
      <i>infog</i> 
     </g> 
     </B> 
     <B> 
     <c>reference to template</c> 
     <d>info h</d> 
     <e>info j</e> 
     <f>info k</f> 
     <g> 
      <h>infot</h> 
      <i>infoy</i> 
     </g> 
     </B> 
    </A> 
</list> 

模板

<list> 
    <R> 
     <S> 
     <t>info 7</t> 
     <u>info 8</u> 
     <v>info 9</v> 
     <w>info 10</w> 
     </S> 
    </R> 
</list> 

我需要做的是顯示所有在ListView編目的設備,這將可從兩個XML雙牀信息。

我試過了,沒有成功,我可以顯示的只有一個設備,它實際上並沒有顯示出來,所有出現的都是不可見的信息。 我通過兩個個XML使用這種運行:

xDocument load = xDocument.load("Myxml.xml"); 
var run = (from x in load.Descendants("A") 
      where x.Element("c").Value == comboBox1.SelectedItems.ToString() 
      select new 
      { 
      a = x.Element("d").Valuye.ToString(), 
      //here I gather the rest of the information 
      }).ToList(); 
listView.Items.Add(run); 
//after that I tried listview.Items.Add(run.a) ... but the code which I use to run through 
//ends with FirstorDefault(), instead of ToList() and I try adding all the components manually 

出現是一種無形的設備,這意味着,當我點擊它,我可以看到有東西在那裏,但我看不出信息的唯一。

所以我嘗試使用相同的方法添加字符串,但得到了相同的結果。

任何人都可以告訴我我的錯誤在哪裏?我看不到它。

PS:在我設法做到這一點後,我要實現一個功能,通過雙擊信息,客戶端將能夠改變信息。如果有人知道從哪裏開始的這一個,請點我在正確的方向

回答

0

我發現出了什麼問題,我需要添加一個可觀察的集合,我在其中添加了我想放在視圖列表上的內容,然後將信息放入viewlist集合中。

謝謝大家的幫助。

1

我相信你的LINQ查詢需要一點淡淡的了,是這樣的:

xDocument load = xDocument.load("Myxml.xml"); 
var run = (from x in load.Descendants("B") 
     where x.Element("c") == comboBox1.SelectedItems.ToString() 
     select new 
     { 
     a = x.Element("d").Valuye.ToString(), 
     //here I gather the rest of the information 
     }).ToList(); 

此外,你應該嘗試使用一對列表循環和添加字符串逐一

foreach (var item in run) 
    listView.Items.Add(item.a); 

您可以在Add方法的這個MSDN頁面上的不同的重載看看:

http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.listviewitemcollection.aspx

+0

我已經試過,並沒有成功。我所得到的是我之前稱之爲「隱形」的內容 – morcillo 2012-03-13 00:03:09

0

說實話,我不完全確定問題是什麼。不過,我會在XDocument查詢中嘗試一下。

進行比較時,您需要比較正確的類型。從例子中的比較甚至不會編譯,因爲有一個XElement的一個String的比較:

where x.Element("c") == comboBox1.SelectedItems.ToString() 

應該是:

where x.Element("c").Value == comboBox1.SelectedItems.ToString() 

如果整體目標是獲得一個字符串列表從查詢中查看下列內容:

string match = comboBox1.SelectedItems.ToString(); 

var doc = XDocument.Load("MyXml.xml"); 

var query = doc.Descendants("B") 
    .Where(x => x.Element("c").Value == match) 
    .Select(x => x.Element("d").Value) 
    .ToList(); 

請注意,查詢以「B」元素開頭。從「A」元素開始將導致在where子句中匹配0個元素。

另外,通過使用其他變量來分解語句,即匹配條件的變量,XDocument的查詢等等,可以更輕鬆地打破這些類型的問題......即使查詢也可以如果需要的話,可以細分爲更多的子查詢。

這應該讓你開始。

+0

對不起,我在這裏鍵入了錯誤的代碼,但在真正的程序中,我是以正確的方式進行的。而且,我嘗試了手動添加值,而不是從XML中添加值,但是我只是現場製作的數據。我試圖複製實例來添加項目,但他們只是不工作 – morcillo 2012-03-13 02:36:12

+0

您需要發佈真實的代碼示例,揭示您難以解決的問題。嘗試用您的問題中的實際代碼重新編寫您的問題。如果你一次只堅持一個問題,這將會更容易。 – 2012-03-13 04:24:37

0

如果您使用的是列表視圖的Detail模式,則需要將columns添加到列表和subitems中對應於每列的項目中,否則您的項目將「不可見」。

請參閱ListView.ColumnsListViewItem.SubItems成員瞭解更多詳情。

+0

我已經添加了listview的列,而且我創建了listvieitem我只是沒有獲得子項目方法或attributre,它只是說它不適用於listviewitem – morcillo 2012-03-13 02:39:09