c#按属性过滤xml文件并在datagridview中显示

问题描述:

我看了,找不到答案,我相信我只是不寻找正确的关键字,哈哈。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只有这些条目,并喜欢以前的所有信息。

如果我没有解释清楚请说出来,因为我之前说的,我知道我“米不解释的事情是最好的。

一种方法是加载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