DynamicGridFilterGrid.cs 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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. Options.AddRange(DynamicGridOption.RecordCount,
  17. DynamicGridOption.AddRows, DynamicGridOption.EditRows, DynamicGridOption.DeleteRows,
  18. DynamicGridOption.MultiSelect);
  19. FilterType = filterType;
  20. OnCustomiseEditor += DynamicGridFilterGrid_OnCustomiseEditor;
  21. }
  22. private void DynamicGridFilterGrid_OnCustomiseEditor(IDynamicEditorForm sender, CoreFilterDefinition[]? items, DynamicGridColumn column, BaseEditor editor)
  23. {
  24. if(column.ColumnName == nameof(CoreFilterDefinition.Filter) && editor is FilterEditor filterEditor)
  25. {
  26. filterEditor.Type = FilterType;
  27. }
  28. }
  29. protected override void DeleteItems(params CoreRow[] rows)
  30. {
  31. foreach (var row in rows.OrderByDescending(x => x.Index))
  32. Filters.RemoveAt(row.Index);
  33. }
  34. protected override CoreFilterDefinition LoadItem(CoreRow row)
  35. {
  36. var index = Data.Rows.IndexOf(row);
  37. return Filters[index];
  38. }
  39. protected override void Reload(Filters<CoreFilterDefinition> criteria, Columns<CoreFilterDefinition> columns, ref SortOrder<CoreFilterDefinition>? sort, Action<CoreTable?, Exception?> action)
  40. {
  41. var result = new CoreTable();
  42. if (columns == null || !columns.Items.Any())
  43. result.LoadColumns(typeof(CoreFilterDefinition));
  44. else
  45. foreach (var column in columns.Items)
  46. result.Columns.Add(new CoreColumn { ColumnName = column.ToString(), DataType = column.Expression.Type });
  47. result.LoadRows(Filters);
  48. action.Invoke(result, null);
  49. }
  50. public override void SaveItem(CoreFilterDefinition item)
  51. {
  52. if (!Filters.Contains(item))
  53. Filters.Add(item);
  54. }
  55. }
  56. }