DynamicGridFilterGrid.cs 2.4 KB

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