我一直在寻找答案: 我有一个格式如下的XML文件:
<root>
<string id = "STRING_ID">
<node1> Some data </node1>
<node2>
<type>data</type>
</node2>
<Translations>
<language name="ARABIC">
<value>Some data</value>
<date_last_changed>7-4-2011</date_last_changed>
</language>
<language name="CHINESE">
...
...
</Translations>
</string>
<string id = "...">
...
...
</root>
我使用XML文件中的信息加载了一个DataSet。 然后我通过
将DataSet绑定到DataGridViewDataGridView1.DataSource = dataSet1;
然后使用
DataGridView1.DataMember = "string";
目前,datagridview显示节点1中的内容,以及每个字符串元素的id属性的值。
我的问题是:如何使用语言名称为<value>
的每个<language>
中的<string>
的所有"ENGLISH"
元素中包含的数据填充列。 "ARABIC"
等等?听起来像是对我的询问,但我不知道该怎么做。
基本上我希望一列始终显示与datagridview中相应字符串ID对应的每个英文字符串,然后再显示一列以显示我使用ComboBox中的列表选择的每种语言字符串。
答案 0 :(得分:2)
如果您使用的是Windows窗体应用程序,则应该进行下一步:
如果DataGridView没有显示适当的列,则检查当前绑定到DataSource的DataGridView属性。如果你想操纵列,必须正确定义。
这是DataSource的一个示例,然后可以在Windows窗体应用程序中拖放。如您所见,属性可以作为各种控件删除。在您的示例中,您应将语言设置为ComboBox。在此示例中,您可以在表定义为ComboBox的表下看到属性Oznaka:
最后,一切都取决于DataSet是如何从XML构建的(您可以使用哪些属性)。因此,如果您没有为您的问题定义正确的属性,那么您应该返回并设计正确的DataSet。
答案 1 :(得分:0)
XDocument xdoc = XDocument.Load("<path_to_your_xml_file>");
var myLittleObjects = (from y in
(from c in xdoc.Descendants("string")
select c).ToList()
select new
{
Nodes = (from p in
(from h in y.Descendants()
where h.Name.LocalName.Contains("node")
select h).ToList()
select new { NodeValue = p.Value, NodeType = (from t in p.Descendants("type").ToList() select t.Value).ToList() }).ToList(),
//Translations = ... //same logic as for nodes
}
).ToList();
Console.WriteLine(myLittleObjects.Count());
现在您可以使用Business Objects了。这将允许您将“myLittleObjects”变量的特定对象属性绑定到数据网格。
请注意,只是这个简单的语句会将整个XML文件转换为一个对象列表,而这些对象又会有一个“节点”和一个“翻译”属性,而这些属性又将成为他们自己的具有各自属性的类(在Node的情况下将是NodeValue和NodeType,而NodeType又是List)
对于我草率的写作,我很抱歉。