尝试从DataGridView计算xml值

时间:2015-04-16 14:28:20

标签: c# xml winforms 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>字段/行,然后计算这些行的<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();按钮时调用此功能,希望首先在控制台中看到它。目前没有使用任何返回的代码。

1 个答案:

答案 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>