DynamicGridFilterGrid.cs 2.6 KB

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