【问题标题】:Using XML to populate dynamic datagridview使用 XML 填充动态 datagridview
【发布时间】:2016-06-24 11:19:17
【问题描述】:

我有一个 XML 文件,需要在我的 datagridview 中填充两列。我以前从未使用过 XML,但我已经将它变成了可以通过文本框和按钮将“数据”部分更改为我想要的任何内容的地方。现在我需要它,我可以将“Child1”放置在一个名为“Name”的列中,并将“data”部分放置在第一个名为“Value”旁边的另一列中。另外,我正在运行时创建 datagridview,我最终希望这个工具能够根据已读取的 xml 文件动态更改。

顶部元素

<Child1>data</Child1>

<Child2>data</Child2>

<Child3>data</Child3>

<Child4>data</Child4>

/TopElement

我已经尝试同时使用 system.XML 和 system.XML.Linq,但我似乎无法使用我需要的内容填充 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);
}

【问题讨论】:

    标签: c# xml datagridview


    【解决方案1】:

    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。将匿名 Enumerable 对象列表转换为 DataTable

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

    【讨论】:

    • 我将 DataTable 链接到 DataGridView 并且效果很好。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2016-02-03
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多