MobileGridColumns.cs 2.1 KB

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