DynamicGridDoubleAggregate.cs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.Data;
  6. using System.Linq;
  7. using InABox.Core;
  8. using Syncfusion.Data;
  9. namespace InABox.DynamicGrid;
  10. public class DynamicGridDoubleAggregate : ISummaryAggregate
  11. {
  12. public int Count { get; private set; }
  13. public double Sum { get; private set; }
  14. public Action<IEnumerable, string, PropertyDescriptor> CalculateAggregateFunc()
  15. {
  16. return CalculateAggregate;
  17. }
  18. private void CalculateAggregate(IEnumerable items, string property, PropertyDescriptor args)
  19. {
  20. if (items is IEnumerable<DataRowView> rows)
  21. {
  22. if (string.Equals(args.Name, "Count"))
  23. {
  24. Count = rows.Count();
  25. }
  26. else if (string.Equals(args.Name, "Sum"))
  27. {
  28. Sum = 0;
  29. foreach (var row in rows)
  30. if (row[property] is TimeSpan)
  31. Sum += (double)row[property];
  32. }
  33. }
  34. else
  35. {
  36. Logger.Send(LogType.Error, "", $"Attempting to calculate aggregate on invalid data type '{items.GetType()}'.");
  37. }
  38. }
  39. }