MobileGridColumns.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using InABox.Core;
  5. using Syncfusion.SfDataGrid.XForms;
  6. namespace InABox.Mobile
  7. {
  8. public class MobileGridColumns
  9. {
  10. private SfDataGrid _grid;
  11. private List<IMobileGridColumn> _columns;
  12. private bool _updating;
  13. public IMobileGridColumn this[int index] => _columns[index];
  14. public event EventHandler Changed;
  15. public MobileGridColumns(SfDataGrid grid)
  16. {
  17. _grid = grid;
  18. _columns = new List<IMobileGridColumn>();
  19. }
  20. private void Update()
  21. {
  22. if (_updating)
  23. return;
  24. _grid.Columns.Suspend();
  25. _grid.Columns.Clear();
  26. foreach (var column in _columns)
  27. _grid.Columns.Add(column.CreateColumn());
  28. _grid.TableSummaryRows.Clear();
  29. var summaries = _columns.OfType<IMobileGridSummaryColumn>()
  30. .Where(x => x.Summary != MobileGridSummaryType.None).ToArray();
  31. if (summaries.Any())
  32. {
  33. var row = new GridTableSummaryRow() { ShowSummaryInRow = false };
  34. foreach (var summary in summaries)
  35. row.SummaryColumns.Add(summary.CreateSummaryColumn());
  36. _grid.TableSummaryRows.Add(row);
  37. }
  38. _grid.Columns.Resume();
  39. _grid.RefreshColumns();
  40. Changed?.Invoke(this, EventArgs.Empty);
  41. }
  42. public MobileGridColumns BeginUpdate()
  43. {
  44. _updating = true;
  45. return this;
  46. }
  47. public MobileGridColumns EndUpdate()
  48. {
  49. _updating = false;
  50. Update();
  51. return this;
  52. }
  53. public MobileGridColumns Clear()
  54. {
  55. _columns.Clear();
  56. Update();
  57. return this;
  58. }
  59. public MobileGridColumns Add(IMobileGridColumn column)
  60. {
  61. _columns.Add(column);
  62. Update();
  63. return this;
  64. }
  65. }
  66. }