C# 尝试从DataGridView计算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

我已经基于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>
    <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>