使用XML填充动态datagridview

时间:2016-06-24 11:19:18

标签: c# xml datagridview

我有一个XML文件,需要在我的datagridview中填充两列。我之前从未使用过XML,但我已经把它带到了我可以改变数据的地方。通过文本框和按钮分享我想要的任何东西。现在我需要它到我可以拥有" Child1"被放入一个名为" Name"和#34;数据"在第一个叫做"值"旁边的另一列中。另外,我在运行时创建了datagridview,我最终希望这个工具能够根据已读取的xml文件动态更改。

顶级元素

<Child1>data</Child1>

<Child2>data</Child2>

<Child3>data</Child3>

<Child4>data</Child4>

/ TopElement

我尝试过使用system.XML和system.XML.Linq,我似乎无法用我需要的东西填充datagridview列。我的dataSet为我的datagridview添加了两列,只有一行,这两列都不是我想要的。

try
{
   xmlReader xmlFile;
   xmlFile = XmlReader.Create(@"C:location\dataFile.xml", new XmlReaderSettings());
   DataSet ds = new DataSet();
   ds.ReadXml(@"C:location\datafile.xml");
   dgv_XML.DataSource = ds.Tables[0];
}
catch (Exception ex)
{
   MessageBox.Show(ex.ToString());
}

我尝试使用foreach循环获取所有行,但它只会导致我的程序崩溃。

foreach (XNode name_node in TopElement.Nodes())
{
   dgv_XML.Rows.Insert(0,1);
}

1 个答案:

答案 0 :(得分:0)

1.使用“名称”和“值”列创建数据表

 DataTable dt = new DataTable();
 dt.Columns.Add("Name");
 dt.Columns.Add("Value");

2.将您的XML文件载入XDocumnet

XDocument doc = XDocument.Load(@"XMLFilePath");

3.在XDocument上使用LINQ创建所需的名称 - 值对作为匿名对象

var rows = doc.Root.Descendants().Select(element => new
{
  Name = element.Name,
  Value = element.Value,
 });

4。将匿名可枚举对象列表转换为DataTable

rows.ToList().ForEach(i => dt.Rows.Add(i.Name, i.Value));