c#通过属性过滤XML文件并显示在datagridview中
本文关键字:显示 datagridview 文件 XML 属性 过滤 | 更新日期: 2023-09-27 17:49:45
我已经看过了,找不到答案,我敢肯定我只是没有寻找正确的关键字,哈哈。
我有一个XML文件,我在datagridview中显示,这一切都很好。我试图植入在哪里我可以点击一个按钮,并"重新加载"只有xml文件的某些部分的datagridview。
我会更好地描述。请耐心听我说,我不擅长解释。
这是我的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>
当我正常显示时,我将它放在一个网格视图中,像这样。我不得不把图片上传到别处,网站不让我放在这里。在这里输入链接描述
现在我要做的是,当我点击一个按钮时,我只能显示某些电影类型。例如,单击一个按钮,只显示"动作"电影。
我已经找到了这方面的信息,并得到了我可以只选择动作的地方。我让它们在消息框中弹出
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);
}
这实际上从图像中显示了2部动作电影。但是我不知道如何只使用这些条目重新加载datagridview,并且更喜欢像以前一样使用所有信息。
如果我没有解释清楚,请告诉我,正如我之前所说的,我知道我不擅长解释事情。
一种方法是将xml加载到DataTable中。然后你可以使用它的内存过滤功能来过滤网格。
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 + "*')";