DynamicGridFilterGrid.cs 2.2 KB

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