【问题标题】:XML multiple nodes into dataGridView with 2 column将 XML 多个节点放入具有 2 列的 dataGridView
【发布时间】:2020-10-08 02:57:05
【问题描述】:

我正在尝试将此 xml 放入 DataGridView 中,数据网格视图 显示 节点

我尝试使用switchcaseforeach 节点,但结果节点和值仅显示在 1 列而不是 2 列。我尝试使用选择单个节点,但它显示对象错误。,

下面是代码示例:

try
            {
                reader = new XmlTextReader(filename);
                reader.WhitespaceHandling = WhitespaceHandling.None;
               

                while (reader.Read())
                {
                    

                    switch (reader.NodeType)
                    {
                        case XmlNodeType.Element:
                            //dataGridView1.Rows[cnt].Cells[1].Value = reader.Name;
                            dataGridView1.Rows.Add(reader.Name);
                            break;
                        case XmlNodeType.Text:
                            dataGridView1.Rows.Add("\t",reader.Value);
                            //dataGridView1.Rows[cnt].Cells[0].Value = reader.Value;
                            break;
                        case XmlNodeType.EndElement:
                            break;
                    }

我的导师说,使用此代码,但我不知道我的导师示例缺少什么

XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load("ConfigAPI.xml");

            XmlNodeList nodeList = xmlDoc.DocumentElement.SelectNodes("/ConfigAPI");
            
               foreach (XmlNode node in nodeList)
            {
            node.SelectSingleNode("UIPlayer").InnerText;
            }

这里还有一个 XML 示例

<ConfigAPI>
  <CoreUIAddress>http://localhost:3223</CoreUIAddress>
  <CoreAppsAddress>http://localhost:3333</CoreAppsAddress>
  <CoreCustomPrinterAddress>http://localhost:3001</CoreCustomPrinterAddress>
  <CorePassbookPrinterAddress>http://localhost:3002</CorePassbookPrinterAddress>
  <CorePrinterAddress>http://localhost:3003</CorePrinterAddress>
  <CoreEDCAddress>http://localhost:3010</CoreEDCAddress>
  <CoreCamAddress>http://localhost:3011</CoreCamAddress>
  <CoreUPSAddress>http://localhost:3012</CoreUPSAddress>
</ConfigAPI>

通过使用第一个代码,它显示了类似这样的内容(没有“\t”)

Column 1                       Column 2
core UI Adress
http localhost
core APps
http localhost

不确定如何在第二列显示数据,以便可以这样查看

Column 1                      Column 2
Core Ui Adress                 Http Localhost
Core APPs                      Http Localhost

【问题讨论】:

  • 您遇到的错误是什么?您可以通过编辑将其放入您的问题中吗?我也把你的问题整理了一下,希望你不要介意。无论如何+1。祝你好运!
  • 你好@MickyD,当我执行第一个代码时,它没有显示错误,它在数据网格视图中显示了类似的内容。 (没有“\t”)第 1 列 Column2 CoreUI http:localhost 核心应用程序 http localhost 我试图做什么以使第 2 列的值.. 通过使用“\t”,它显示在 2n 列上,但不断跳过通过空单元格..
  • 你在网格中想要什么?第1列会是?第2列会是?看起来 ConfigAPI 节点中有八个元素。此外,“\t”不会转到网格中的下一个单元格。
  • 您好@JohnG,是的,我知道有 8 个不同的元素,我的导师显示了它的可能,因此该元素将像我的上一条语句一样显示,通过使用我的导师方式,它显示了这个“错误严重性代码描述Project File Line Suppression StateOnly assignment、call、increment、decrement、await和new对象表达式都可以作为语句XMLtoDataTable”。
  • 嗯……第二个 sn-p 代码看起来是正确的方法。您需要更改代码,以便……代码行……node.SelectSingleNode("UIPlayer").InnerText;……将“返回”一个值。当前代码没有得到这个“返回”值。应该是……var coreUIAddress = node.SelectSingleNode("CoreUIAddress").InnerText;……

标签: c# xml datagridview


【解决方案1】:

使用发布的第二个示例中的几行代码和给定的 XML……下面应该显示数据是两列。

  XmlDocument xmlDoc = new XmlDocument();
  xmlDoc.Load(@"PathToYourXMLFile\ConfigAPI.xml");
  XmlNodeList RootNodeList = xmlDoc.DocumentElement.SelectNodes("/ConfigAPI");
  for (int i = 0; i < 2; i++) {
    dataGridView1.Columns.Add(new DataGridViewTextBoxColumn());
  }
  foreach (XmlNode ConfigNode in RootNodeList[0]) {
    foreach (XmlNode childNode in ConfigNode.ChildNodes) {
      int newRowIndex = dataGridView1.Rows.Add();
      dataGridView1.Rows[newRowIndex].Cells[0].Value = childNode.ParentNode.Name;
      dataGridView1.Rows[newRowIndex].Cells[1].Value = childNode.InnerText;
    }
  }

根据 OP 评论添加...

从某种意义上说,第一个“外部”循环对于使用发布的 XML 并不是真正必要的,这有点令人困惑。当我测试代码时,我在 XML 文件中有许多 ConfigAPI 节点。不仅仅是你发布的那个。因此,您可以将其简化为一个循环...

foreach (XmlNode childNode in RootNodeList[0].ChildNodes) {
  int newRowIndex = dataGridView1.Rows.Add();
  dataGridView1.Rows[newRowIndex].Cells[0].Value = childNode.Name;
  dataGridView1.Rows[newRowIndex].Cells[1].Value = childNode.InnerText;
}

【讨论】:

  • 约翰先生,您好,感谢您的回答,我对嵌套的 foreach 逻辑有疑问?
猜你喜欢
  • 2018-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多