| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 | using System;using System.Collections;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Linq;using InABox.Core;using InABox.WPF;namespace InABox.DynamicGrid;public class DynamicGridDurationAggregate : IDynamicGridSummaryAggregate{    public int Count { get; private set; }    public TimeSpan Sum { get; private set; }    public Action<IEnumerable, string, PropertyDescriptor> CalculateAggregateFunc()    {        return CalculateAggregate;    }    private void CalculateAggregate(IEnumerable items, string property, PropertyDescriptor args)    {        if (items is IEnumerable<DataRowView> rows)        {            if (string.Equals(args.Name, "Count"))            {                Count = rows.Count();            }            else if (string.Equals(args.Name, "Sum"))            {                Sum = new TimeSpan();                foreach (var row in rows)                    if (row[property] is TimeSpan)                        Sum += (TimeSpan)row[property];            }        }        else        {            Logger.Send(LogType.Error, "", $"Attempting to calculate aggregate on invalid data type '{items.GetType()}'.");        }    }    public string Format(String command, String format)    {        if (string.Equals(command, "Sum"))            return string.IsNullOrWhiteSpace(format) || string.Equals(format, "hh':'mm")                ? Math.Truncate(Sum.TotalHours).ToString("#00") + ":" + Sum.Minutes.ToString("D2")                : new TimeSpanToStringConverter(format).Convert(Sum);                        if (string.Equals(command, "Count"))            return string.Format(format, Count);        return "";    }}
 |