2011-04-09 85 views
0

我看了,找不到答案,我相信我只是不尋找正確的關鍵字,哈哈。c#按屬性過濾xml文件並在datagridview中顯示

我有一個XML文件,我顯示在datagridview,這一切工作正常。我試圖植入到哪裏我可以點擊一個按鈕,並'只重載'datagridview只有特定部分的XML文件。

我會更好地描述。只要忍耐一下,我不是最好的解釋。

這是我的xml文件的佈局。

<?xml version="1.0"?> 
<Movies> 
    <Name Name="Saw" Type="Horror" Year="2004-10-29" Overview="Overview">Saw</Name> 
    <Name Name="Saw II" Type="Horror" Year="2005-10-28" Overview="Overview">Saw II</Name> 
    <Name Name="Speed" Type="Action" Year="1994-06-10" Overview="Overview">Speed</Name> 
    <Name Name="Batman Begins" Type="Action" Year="2005-06-17" Overview="Overview">Batman Begins</Name> 
</Movies> 

當我正常顯示,我有它像一個網格視圖像這樣。 我不得不在其他地方上傳圖片,網站不會讓我把它放在這裏。 enter link description here

現在我想要做的是當我點擊一個按鈕時,我只能顯示某些電影類型。例如說,點擊一個按鈕,只顯示「動作」的電影。

我發現了這方面的信息,並得到了我只能選擇行動的地方。我讓他們彈出在消息框'

   XmlDocument xml = new XmlDocument(); 
      xml.Load("movie.xml"); 

      XmlNodeList xnList = xml.SelectNodes("/Movies/Name[@Type='Action']"); 
      foreach (XmlNode xn in xnList) 
      { 
       MessageBox.Show(xn.InnerText); 
      } 

這實際上顯示說,從圖像中的兩個電影是行動。但我不知道如何重新加載datagridview只有這些條目,並喜歡以前的所有信息。

如果我沒有解釋清楚請說出來,因爲我之前說的,我知道我「米不解釋的事情是最好的。

回答

1

一種方法是加載XML到數據表。然後你可以使用其內存過濾功能來過濾電網。

DataSet ds = new DataSet(); 
ds.ReadXml("Movies.xml"); 
this.dataGridView.DataSource = ds.Tables[0]; 

然後你就可以過濾它像這樣

private void FilterByType(string type) 
{ 
      var dataView = ((DataTable) this.dataGridView.DataSource).DefaultView; 
      dataView.RowFilter = "(Type = '" + type + "')"; 
} 

要通過串用這個語法

過濾
dataView.RowFilter = "(Type LIKE *'" + substring + "*')"; 
+0

我已經在這裏試過你的方法。我仍然遇到錯誤,我確信這是我只是一個小菜鳥。 我嘗試像你顯示的加載,但網格返回一個空白。 DataSet movies = new DataSet(「Name」); string filePath =「movie.xml」; movies.ReadXml(filePath); dataGridView1.DataSource = movies.Tables [0]; FilterByType(「Action」); – AlabamaHit 2011-04-10 06:30:16

+0

您是否定義了datagridview的列?如果在設置DataSource之前未嘗試設置dataGridView1.AutoGenerateColumns = true。 – 2011-04-10 08:43:57

+0

現在我試過 DataSet movies = new DataSet(); string filePath =「movie.xml」; movies.ReadXml(filePath); dataGridView1.AutoGenerateColumns = true; DataGridView1.DataSource = moives.Tables [0]; FilterByType(「Action」); 同樣的結果,它返回一個空的datagridview。你認爲這可能是因爲在程序加載時,datagridview顯示列表中的所有moives。對於大名單這是試圖得到這個的原因,所以我可以減少名單隻有某些gendre 再次,感謝您抽出時間和幫助我。非常感謝。 – AlabamaHit 2011-04-10 22:22:07