我已经成功创建了一个基于MS演练的DataGridView,用于将xml读入DataGridView。
https://msdn.microsoft.com/en-us/library/ekw4dh3f.aspx
我现在正在尝试根据xml条目的日期对信息进行排序,以计算xml文件中存在的总刻度。 XML示例:
<?xml version="1.0" encoding="utf-8"?>
<Form1>
<Name Key="4/13/2015 6:31:26 AM">
<Date>4/13/2015</Date>
<JobNum>00000</JobNum>
<RevNum>00000</RevNum>
<Task>TimeStar</Task>
<Start>06:31 AM</Start>
<End>06:35 AM</End>
<TotalTime>2163346393</TotalTime>
</Name>
<Name Key="4/13/2015 6:35:11 AM">
<Date>4/13/2015</Date>
<JobNum>27163</JobNum>
<RevNum>00000</RevNum>
<Task>Redlines</Task>
<Start>06:35 AM</Start>
<End>07:35 AM</End>
<TotalTime>36229156954</TotalTime>
</Name>
//etc.
</Form1>
基本上我只是试图收集所有<Date>
字段/行,然后计算这些行的<TotalTime>
。我尝试从XML中执行此操作,以基于唯一日期字段动态创建标签,然后计算我们在该行中的任何TotalTime字段。
Get the positions of unique elements in a string[]
有人告诉我,使用DataGridView会更容易,但我相信情况并非如此。任何人都可以指出我正确的方向,如何排序或过滤这个或前一个问题。我没有得到它。我真的不想为我写的答案。我只是无法绕过它。
在我看来,结构应该是这样的:
foreach(filter date)
{
uniqueDate = true;
new Label == CreateLabel();
foreach(date = array[x])
{
if (date = array[x])
{
sum = TotalTime[x];
}
}
}
任何人都可以帮我解决这个问题。似乎代码应该适用于DataGridView或直接读取XML。
非常感谢您提供任何帮助我的帮助。我真的很感激: - )
编辑:这是我得到XMLException未处理的地方 - 根级别的数据无效。代码是根据塞德里克的答案修改的。
public string sum2()
{
var document = XDocument.Parse(filePath);
double getit = 0;
foreach (var dates in document.Root.Elements("Name").GroupBy(i => i.Element("Date").Value))
{
double summ = 0;
foreach (var date in dates)
{
summ += Convert.ToDouble(date.Element("TotalTime").Value);
}
Console.WriteLine("Date {0} = {1}", dates.Key, summ);
getit = summ;
}
double retunthis = getit;
return retunthis.ToString();
}
我在按下sum2();
按钮时调用此功能,希望首先在控制台中看到它。目前没有使用任何返回的代码。
答案 0 :(得分:2)
如果我的理解是好的。
这就是我所拥有的:
var xml = "<Form1><Name Key='4/13/2015 6:31:26 AM'><Date>4/13/2015</Date><JobNum>00000</JobNum><RevNum>00000</RevNum><Task>TimeStar</Task><Start>06:31 AM</Start><End>06:35 AM</End><TotalTime>2163346393</TotalTime></Name><Name Key='4/13/2015 6:35:11 AM'><Date>4/13/2015</Date><JobNum>27163</JobNum><RevNum>00000</RevNum><Task>Redlines</Task><Start>06:35 AM</Start><End>07:35 AM</End><TotalTime>36229156954</TotalTime></Name><Name Key='4/13/2015 6:35:11 AM'><Date>6/13/2015</Date><JobNum>27163</JobNum><RevNum>00000</RevNum><Task>Redlines</Task><Start>06:35 AM</Start><End>07:35 AM</End><TotalTime>36229156954</TotalTime></Name></Form1>";
var document = XDocument.Parse(xml);
foreach (var dates in document.Root.Elements("Name").GroupBy(i => i.Element("Date").Value))
{
double summ = 0;
foreach (var date in dates)
{
summ += Convert.ToDouble(date.Element("TotalTime").Value);
}
Console.WriteLine ("Date {0} = {1}", dates.Key, summ);
}
输出:
Date 4/13/2015 = 38392503347
Date 6/13/2015 = 36229156954
请注意,我已将日期6/13/2015
添加到您的xml,以便有2个不同的日期
XML:
<Form1>
<Name Key="4/13/2015 6:31:26 AM">
<Date>4/13/2015</Date>
<JobNum>00000</JobNum>
<RevNum>00000</RevNum>
<Task>TimeStar</Task>
<Start>06:31 AM</Start>
<End>06:35 AM</End>
<TotalTime>2163346393</TotalTime>
</Name>
<Name Key="4/13/2015 6:35:11 AM">
<Date>4/13/2015</Date>
<JobNum>27163</JobNum>
<RevNum>00000</RevNum>
<Task>Redlines</Task>
<Start>06:35 AM</Start>
<End>07:35 AM</End>
<TotalTime>36229156954</TotalTime>
</Name>
<Name Key="6/13/2015 6:35:11 AM">
<Date>6/13/2015</Date>
<JobNum>27163</JobNum>
<RevNum>00000</RevNum>
<Task>Redlines</Task>
<Start>06:35 AM</Start>
<End>07:35 AM</End>
<TotalTime>36229156954</TotalTime>
</Name>
</Form1>