2017-05-29 86 views
0

我有一個XML列表,我想在DataGridView中顯示,這個問題代表了列表有子列表,我不能設法還與父表一起顯示從子錶行。C#的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

嘗試以下

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; 
     } 
    } 
}