c#DataGridView包含子关系

时间:2017-05-29 12:51:35

标签: c# xml datagridview

我有一个xml列表,我想在DataGridView中显示,问题在于列表有子列表,我不能设法显示子表和父表的行。

XML

<ArrayOfTranslationMemory>
  <TranslationMemory>
    <Comment>coment</Comment>
    <Client>FINMA-Eidgenössische Finanzmarktaufsicht</Client>
    <Path>/TM-German/FINMA-English-German/FINMA-English-German</Path>
    <segment>3796</segment>
    <Exists>true</Exists>
    <Valid>false</Valid>
    <NeedsConvert>true</NeedsConvert>
    <NewName>FINMA-[en-DE]-German(Swiss)</NewName>
    <Name>FINMA-English-German</Name>
    <ActualLanguagePair>
      <targetLanguage>de-DE</targetLanguage>
      <sourceLanguage>en-GB</sourceLanguage>
    </ActualLanguagePair>
    <DesiredLanguagePair>
      <targetLanguage>de-CH</targetLanguage>
      <sourceLanguage>en-DE</sourceLanguage>
    </DesiredLanguagePair>
  </TranslationMemory>
  <TranslationMemory>
    <Comment>coment</Comment>
    <Client>FINMA-Eidgenössische Finanzmarktaufsicht</Client>
    <Path>/TM-English/FINMA-French-English/FINMA-French-English</Path>
    <segment>186</segment>
    <Exists>true</Exists>
    <Valid>true</Valid>
    <NeedsConvert>true</NeedsConvert>
    <NewName>FINMA-French(Swiss)-English</NewName>
    <Name>FINMA-French-English</Name>
    <ActualLanguagePair>
      <targetLanguage>en-GB</targetLanguage>
      <sourceLanguage>fr-FR</sourceLanguage>
    </ActualLanguagePair>
    <DesiredLanguagePair>
      <targetLanguage>en-GB</targetLanguage>
      <sourceLanguage>fr-CH </sourceLanguage>
    </DesiredLanguagePair>
  </TranslationMemory>
</ArrayOfTranslationMemory>

我希望得到一张这样的表

| Comment | Client | Path | segments | Exists | Valid | NeedsConvert | NewName | Name | ActualL-Target | ActualL-Source | DesiredL-Target | DesiredL-Source |

有人可以告诉我如何将ActualLanguagePair和DesiredLanguagePair添加到主表中吗?

1 个答案:

答案 0 :(得分:1)

尝试以下

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data;
using System.Xml;
using System.Xml.Linq;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        const string FILENAME = @"c:\temp\test.xml";
        DataTable dt = new DataTable();
        public Form1()
        {
            InitializeComponent();

            dt.Columns.Add("Comment", typeof(string));
            dt.Columns.Add("Client", typeof(string));
            dt.Columns.Add("Path", typeof(string));
            dt.Columns.Add("Segment", typeof(int));
            dt.Columns.Add("Exists", typeof(Boolean));
            dt.Columns.Add("Valid", typeof(Boolean));
            dt.Columns.Add("Needs Convert", typeof(Boolean));
            dt.Columns.Add("New Name", typeof(string));
            dt.Columns.Add("Name", typeof(string));
            dt.Columns.Add("Actual Target Language", typeof(string));
            dt.Columns.Add("Actual Source Language", typeof(string));
            dt.Columns.Add("Desired Target Language", typeof(string));
            dt.Columns.Add("Desired Source Language", typeof(string));

            XDocument doc = XDocument.Load(FILENAME);
            foreach (XElement translationMemory in doc.Descendants("TranslationMemory"))
            {
                dt.Rows.Add(new object[] {
                    (string)translationMemory.Element("Comment"),
                    (string)translationMemory.Element("Client"),
                    (string)translationMemory.Element("Path"),
                    (int)translationMemory.Element("segment"),
                    (Boolean)translationMemory.Element("Exists"),
                    (Boolean)translationMemory.Element("Valid"),
                    (Boolean)translationMemory.Element("NeedsConvert"),
                    (string)translationMemory.Element("NewName"),
                    (string)translationMemory.Element("Name"),
                    (string)translationMemory.Element("ActualLanguagePair").Element("targetLanguage"),
                    (string)translationMemory.Element("ActualLanguagePair").Element("sourceLanguage"),
                    (string)translationMemory.Element("DesiredLanguagePair").Element("targetLanguage"),
                    (string)translationMemory.Element("DesiredLanguagePair").Element("sourceLanguage")
                });
            }

            dataGridView1.DataSource = dt;
        }
    }
}
相关问题