C# 使用某些元素作为ColumnHeader时,从Xml文件中创建DataGridView

C# 使用某些元素作为ColumnHeader时,从Xml文件中创建DataGridView,c#,datagridview,C#,Datagridview,我目前有一个如下所示的XmlFile(注意:此XmlFile的结构是最终的): 我如何实现它,使我的DataGridView看起来像我上面展示的一样? 我尝试使用标准的数据集实现,但我想不出一种方法来实现它。请留下评论,如果你需要任何进一步的信息,我试图得到什么或如果有什么是不清楚的 提前谢谢 首先,您需要反序列化数据。为了达到这个目的,你应该有这些课程 [XmlRoot(ElementName = "FileInfo")] public class FileInfo { [XmlAtt

我目前有一个如下所示的XmlFile(注意:此XmlFile的结构是最终的):

我如何实现它,使我的DataGridView看起来像我上面展示的一样? 我尝试使用标准的数据集实现,但我想不出一种方法来实现它。请留下评论,如果你需要任何进一步的信息,我试图得到什么或如果有什么是不清楚的


提前谢谢

首先,您需要反序列化数据。为了达到这个目的,你应该有这些课程

[XmlRoot(ElementName = "FileInfo")]
public class FileInfo
{
    [XmlAttribute(AttributeName = "NumberOfEntries")]
    public string NumberOfEntries { get; set; }
    [XmlAttribute(AttributeName = "FileCreationTime")]
    public string FileCreationTime { get; set; }
}

[XmlRoot(ElementName = "LanguageEntry")]
public class LanguageEntry
{
    [XmlElement(ElementName = "ID")]
    public string ID { get; set; }
    [XmlElement(ElementName = "Value")]
    public string Value { get; set; }
    [XmlElement(ElementName = "Comment")]
    public string Comment { get; set; }
    [XmlElement(ElementName = "Mark")]
    public string Mark { get; set; }
}

[XmlRoot(ElementName = "Entry")]
public class Entry
{
    [XmlElement(ElementName = "LanguageEntry")]
    public List<LanguageEntry> LanguageEntry { get; set; }
    [XmlAttribute(AttributeName = "Key")]
    public string Key { get; set; }
    [XmlAttribute(AttributeName = "CreationTime")]
    public string CreationTime { get; set; }
    [XmlAttribute(AttributeName = "LastModifiedTime")]
    public string LastModifiedTime { get; set; }
}

[XmlRoot(ElementName = "Language")]
public class Language
{
    [XmlElement(ElementName = "FileInfo")]
    public FileInfo FileInfo { get; set; }
    [XmlElement(ElementName = "Entry")]
    public Entry Entry { get; set; }
}

谢谢你的回答。为了使用我的.xml文件,我只需要做一些小改动!我真的很喜欢这个解决方案。
Key        | 1       | 2       | ID3     |...
---------------------------------------------
ABC_DEF_GHI|Hallo    |Hello    |someValue|...
---------------------------------------------
XYZ_DAF_ABC|someValue|someValue|someValue|...
     .          .         .         .   
     .          .         .         .
     .          .         .         .
[XmlRoot(ElementName = "FileInfo")]
public class FileInfo
{
    [XmlAttribute(AttributeName = "NumberOfEntries")]
    public string NumberOfEntries { get; set; }
    [XmlAttribute(AttributeName = "FileCreationTime")]
    public string FileCreationTime { get; set; }
}

[XmlRoot(ElementName = "LanguageEntry")]
public class LanguageEntry
{
    [XmlElement(ElementName = "ID")]
    public string ID { get; set; }
    [XmlElement(ElementName = "Value")]
    public string Value { get; set; }
    [XmlElement(ElementName = "Comment")]
    public string Comment { get; set; }
    [XmlElement(ElementName = "Mark")]
    public string Mark { get; set; }
}

[XmlRoot(ElementName = "Entry")]
public class Entry
{
    [XmlElement(ElementName = "LanguageEntry")]
    public List<LanguageEntry> LanguageEntry { get; set; }
    [XmlAttribute(AttributeName = "Key")]
    public string Key { get; set; }
    [XmlAttribute(AttributeName = "CreationTime")]
    public string CreationTime { get; set; }
    [XmlAttribute(AttributeName = "LastModifiedTime")]
    public string LastModifiedTime { get; set; }
}

[XmlRoot(ElementName = "Language")]
public class Language
{
    [XmlElement(ElementName = "FileInfo")]
    public FileInfo FileInfo { get; set; }
    [XmlElement(ElementName = "Entry")]
    public Entry Entry { get; set; }
}
private void GenerateColumnsAndData(Language language)
{
        var countIds = language.Entry.LanguageEntry.Count;

        dataGridView1.ColumnCount = countIds + 1;

        dataGridView1.Columns[0].Name = "Key";

        for (int i = 0; i < language.Entry.LanguageEntry.Count; i++)
        {
            dataGridView1.Columns[i+1].Name = language.Entry.LanguageEntry[i].ID;
        }

        ArrayList row = new ArrayList();

        row.Add(language.Entry.Key);

        foreach (var item in language.Entry.LanguageEntry)
        {
            row.Add(item.Value);
        }

        dataGridView1.Rows.Add(row.ToArray());
}
 private void Form1_Load(object sender, EventArgs e)
 {

        string xml = @"<Language>
            <FileInfo NumberOfEntries=""10"" FileCreationTime=""2017-07-14 12:23:07"" />
            <Entry Key=""ABC_DEF_GHI"" CreationTime=""01.01.0001 00:00:00"" LastModifiedTime=""01.01.0001 00:00:00"">
                <LanguageEntry>
                    <ID>1</ID>
                    <Value>Hallo</Value>
                    <Comment>
                    </Comment>
                    <Mark>
                    </Mark>
                </LanguageEntry>
                <LanguageEntry>
                    <ID>2</ID>
                    <Value>Hello</Value>
                    <Comment>
                    </Comment>
                    <Mark>
                    </Mark>
                </LanguageEntry>
                </Entry>
                </Language>";         

        XmlSerializer serializer = new XmlSerializer(typeof(Language));

        using(TextReader reader = new StringReader(xml))
        {
            Language result = (Language)serializer.Deserialize(reader);
            GenerateColumnsAndData(result);
        }
  }
 using (FileStream fileStream = new FileStream("MyFilePath", FileMode.Open))
 {
      Language result = (Language)serializer.Deserialize(fileStream);
      GenerateColumnsAndData(result);
 }