将XML String转换为DataGridView

时间:2010-04-13 22:06:57

标签: c# xml parsing

我目前正在使用Web服务来提取有关远程支持系统中用户的报告。

在提取报告并收到结果后,我通过以下方法返回以下字符串:

<report>
    <header>
        <field id="0">Source</field>
        <field id="1">Session ID</field>
        <field id="2">Date</field>
        <field id="3">Name</field>
        <field id="24">Technician Name</field>
        <field id="25">Technician ID</field>
    </header>
    <data>
        <row>
            <field id="0">Email</field>
            <field id="1">55037806</field>
            <field id="2">4/13/2010 2:28:06 AM</field>
            <field id="3">Bill Gates</field>
            <field id="24">John</field>
            <field id="25">1821852</field>
        </row>
        <row>
            <field id="0">Telephone</field>
            <field id="1">55034548</field>
            <field id="2">4/13/2010 12:59:44 AM</field>
            <field id="3">Steve Jobs</field>
            <field id="24">John</field>
            <field id="25">1821852</field>
        </row>
    </data>
</report>

收到此字符串后,我需要接收它并在datagridview中显示实际数据。我已经尝试将它放入XMLDocument然后阅读,但它似乎一直在失败。只对另一组眼睛感兴趣:)应用程序是用VS2010中的C#编写的。

1 个答案:

答案 0 :(得分:2)

您可以使用Linq to XML构建带有XML文件中列名的DataTable,然后将该表设置为DataSource的{​​{1}}:

DataGridView

请注意,上述代码仅在所有字段都具有不同名称时才有效。如果不是这种情况,您可能希望使用字段ID作为 string xml = theWebService.TheMethod(); XDocument doc = XDocument.Parse(xml); var queryHeaders = from field in doc.Root.Element("header").Elements("field") select new { Id = field.Attribute("id").Value, Name = field.Value }; var headers = queryHeaders.ToDictionary(f => f.Id, f => f.Name); DataTable table = new DataTable(); foreach (var kvp in headers) { table.Columns.Add(kvp.Value); } Func<XElement, DataRow> rowGenerator = element => { var row = table.NewRow(); foreach (var field in element.Elements("field")) { string fieldId = field.Attribute("id").Value; string columnName = headers[fieldId]; string value = field.Value; row[columnName] = value; } return row; }; var rows = from rowElement in doc.Root.Element("data").Elements("row") select rowGenerator(rowElement); foreach (var row in rows) { table.Rows.Add(row); } dataGridView.AutoGenerateColumns = true; dataGridView.DataSource = table; 名称,并使用实际字段名称更改DGV的标题