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 + "*')";
我已经在这里试过你的方法。我仍然遇到错误,我确信这是我只是一个小菜鸟。 我尝试像你显示的加载,但网格返回一个空白。 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
您是否定义了datagridview的列?如果在设置DataSource之前未尝试设置dataGridView1.AutoGenerateColumns = true。 – 2011-04-10 08:43:57
现在我试过 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