DynamicGridFilterGrid.cs 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. using InABox.Core;
  2. using InABox.Wpf;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading;
  8. using System.Threading.Tasks;
  9. namespace InABox.DynamicGrid
  10. {
  11. public class DynamicGridFilterGrid : DynamicGrid<CoreFilterDefinition>
  12. {
  13. public CoreFilterDefinitions Filters;
  14. private Type FilterType;
  15. public DynamicGridFilterGrid(Type filterType)
  16. {
  17. Filters = new CoreFilterDefinitions();
  18. FilterType = filterType;
  19. OnCustomiseEditor += DynamicGridFilterGrid_OnCustomiseEditor;
  20. }
  21. protected override void Init()
  22. {
  23. }
  24. protected override void DoReconfigure(DynamicGridOptions options)
  25. {
  26. options.RecordCount = true;
  27. options.AddRows = true;
  28. options.EditRows = true;
  29. options.DeleteRows = true;
  30. options.MultiSelect = true;
  31. }
  32. private void DynamicGridFilterGrid_OnCustomiseEditor(IDynamicEditorForm sender, CoreFilterDefinition[]? items, DynamicGridColumn column, BaseEditor editor)
  33. {
  34. if(column.ColumnName == nameof(CoreFilterDefinition.Filter) && editor is FilterEditor filterEditor)
  35. {
  36. filterEditor.Type = FilterType;
  37. }
  38. }
  39. public override void DeleteItems(params CoreRow[] rows)
  40. {
  41. foreach (var row in rows.OrderByDescending(x => x.Index))
  42. Filters.RemoveAt(row.Index);
  43. }
  44. public override CoreFilterDefinition LoadItem(CoreRow row)
  45. {
  46. var index = Data.Rows.IndexOf(row);
  47. return Filters[index];
  48. }
  49. protected override void Reload(
  50. Filters<CoreFilterDefinition> criteria, Columns<CoreFilterDefinition> columns, ref SortOrder<CoreFilterDefinition>? sort,
  51. CancellationToken token, Action<CoreTable?, Exception?> action)
  52. {
  53. var result = new CoreTable();
  54. if (columns == null || columns.Count == 0)
  55. result.LoadColumns(typeof(CoreFilterDefinition));
  56. else
  57. result.LoadColumns(columns);
  58. result.LoadRows(Filters);
  59. action.Invoke(result, null);
  60. }
  61. public override void SaveItem(CoreFilterDefinition item)
  62. {
  63. if (!Filters.Contains(item))
  64. {
  65. Filters.Add(item);
  66. }
  67. Filters.Sort((x, y) => x.Sequence.CompareTo(y.Sequence));
  68. }
  69. }
  70. }