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