尝试从 DataGridView 计算 xml 值
Trying to calculate xml values from DataGridView
我已经根据 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>
fields/Rows,然后计算这些行的 <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。
非常感谢您能为我提供的任何帮助。我真的很感激:-)
编辑:这是我得到 XML异常未处理的地方 - 根级别的数据无效。代码是根据 Cedric 的回答修改的。
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();
希望首先在控制台中看到它的运行情况。当前未使用任何返回的代码。
如果我的理解还好的话
这是我的资料:
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>
我已经根据 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>
fields/Rows,然后计算这些行的 <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。
非常感谢您能为我提供的任何帮助。我真的很感激:-)
编辑:这是我得到 XML异常未处理的地方 - 根级别的数据无效。代码是根据 Cedric 的回答修改的。
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();
希望首先在控制台中看到它的运行情况。当前未使用任何返回的代码。
如果我的理解还好的话
这是我的资料:
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>