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

时间:2011-04-09 01:33:01

标签: c# datagridview filter

我看了,找不到答案,我确定我只是没有找到合适的关键词,哈哈。

我有一个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>

当我正常显示时,我将它放在网格视图中。 我不得不在其他地方上传图片,网站不会让我把它放在这里。 enter link description here

现在我要做的就是make是当我点击一个按钮时我只能显示某些电影类型。比如说,单击一个按钮,只显示“动作”的电影。

我已经找到了相关的信息并得到了我只能选择操作的地方。我让它们弹出消息框'

                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,并且喜欢以前的所有信息。

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

1 个答案:

答案 0 :(得分:1)

一种方法是将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 + "*')";