C# 尝试从DataGridView计算xml值
我已经基于MS演练成功创建了一个DataGridView,用于将xml读入DataGridView 我现在尝试根据xml条目的日期对信息进行排序,以计算xml文件中存在的总刻度。XML示例:C# 尝试从DataGridView计算xml值,c#,xml,winforms,datagridview,C#,Xml,Winforms,Datagridview,我已经基于MS演练成功创建了一个DataGridView,用于将xml读入DataGridView 我现在尝试根据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> <JobNu
<?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>
谁能帮我弄一下这个的结构吗。似乎代码应该适用于DataGridView或直接读取XML
事先非常感谢您对我的任何帮助。我真的很感激:-)
编辑:这就是我得到未处理的XMLException的地方-根级别的数据无效。代码根据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);
}
注意,我将日期2015年6月13日
添加到您的xml中,使其具有两个不同的日期
XML:
4/13/2015
00000
00000
时代之星
上午6:31
上午6:35
2163346393
4/13/2015
27163
00000
红线
上午6:35
上午7:35
36229156954
6/13/2015
27163
00000
红线
上午6:35
上午7:35
36229156954
为了确保,您正在尝试按“TotalTime”列对网格进行排序,以便计算“TotalTime”列的总和?否。让我检查一下问题。它按排序以获得所有唯一的[x]日期。然后查找唯一[x]日期的每一行号。在我的另一个问题中,我尝试创建一个新数组,但失败得很惨。在问题末尾的代码中,有一些运算符被滥用。“=”是用于赋值的赋值运算符,“=”是用于测试两个值或引用是否相等的比较运算符。您应该更改newlabel==CreateLabel()
to Label tempLabel=CreateLabel()`(假设您使用CreateLabel作为返回标签对象的方法),然后将foreach(date=array[x]){if(date=array[x])…
更改为foreach(date in“whatever collection”){if(date==array[x]){“do work…`我不明白你的问题,你想要一个每天总时间的总和吗?不,我的想法太复杂了:DCedric。这看起来很接近。让我插上它,看看会发生什么:-D谢谢!!我仍然在这个Cedric。请看编辑过的代码。我得到错误:XMLException未处理。根级别的数据无效。第1行,Posi选项1.我想我没有声明新的XDocument::-(如果您使用的是文件路径,请使用XDocument.Load(FilePath)
并且您的代码不会工作,只有最后一个日期将作为字符串返回OK。我记得这一点。我需要看看这一点。我有可能是空值或空值。我认为如果没有报告值,我需要确保这些值都是零。用户可以创建一个条目,但它会放置一个空值或空值“”条目和代码无法读取。我正在测试中添加if语句。我想我现在需要解决这个问题。你就是那个男人!!(女人):-D谢谢Cedric!!非常感谢你
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
<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>