在Data Grid View C#上自动添加一行

时间:2015-03-18 10:32:46

标签: c# xml forms datagridview

基本上我创建了允许上传XML文件的表单应用程序,然后在数据网格视图中显示XML文件的内容。

这是我搜索和打开文件的代码。

        OpenFileDialog ofd = new OpenFileDialog();
        ofd.Filter = "XML | *.xml";
        if (ofd.ShowDialog() == DialogResult.OK)
        {
            XmlDocument xDOC = new XmlDocument();
            xDOC.Load(ofd.FileName);

            int n = dataGridView1.Rows.Add();
            dataGridView1.Rows[n].Cells[0].Value = xDOC.InnerText;

        }

这是XML:

<people>
 <person> David </person>
 <person> Joey </person>
 <person> Adam </person>
</people>

我设法让它工作,但由于某种原因,XML文件的所有内容都显示在同一行!帮助?!

1 个答案:

答案 0 :(得分:2)

目前,您要在同一单元格中添加文件的整个内容(InnerText)。您必须获取所需节点的内容。

这样的事情应该有效:

    OpenFileDialog ofd = new OpenFileDialog();
    ofd.Filter = "XML | *.xml";
    if (ofd.ShowDialog() == DialogResult.OK)
    {
        XmlDocument xDOC = new XmlDocument();
        xDOC.Load(ofd.FileName);

        //We loop through each person node of our document
        foreach(XmlNode node in xDOC.SelectNodes("people/person"))
        {
            //And add its content to a new row
            int n = dataGridView1.Rows.Add();
            dataGridView1.Rows[n].Cells[0].Value = node.InnerText;
        }

    }

我们所做的是为SelectNode函数提供我们想要的项目的XPath。可以把它想象成文件路径但是对于Xml。

我建议你看一下System.Linq.Xml命名空间,特别是XDocument类,我认为它提供了一种更简单的方法来处理Xml。