JobEquipmentGrid.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. using System;
  2. using System.Linq;
  3. using Comal.Classes;
  4. using InABox.Core;
  5. using InABox.DynamicGrid;
  6. using InABox.Wpf;
  7. namespace PRSDesktop
  8. {
  9. public class JobEquipmentGrid : DynamicDataGrid<JobEquipment>, IMasterDetailControl<Job,JobEquipment>, IDataModelSource
  10. {
  11. public Job? Master { get; set; }
  12. public Filter<JobEquipment> MasterDetailFilter => (Master?.ID ?? Guid.Empty) != Guid.Empty
  13. ? new Filter<JobEquipment>(x => x.JobLink.ID).IsEqualTo(Master.ID)
  14. : new Filter<JobEquipment>().None();
  15. protected override void DoReconfigure(FluentList<DynamicGridOption> options)
  16. {
  17. base.DoReconfigure(options);
  18. options
  19. .BeginUpdate()
  20. .Add(DynamicGridOption.SelectColumns)
  21. .Add(DynamicGridOption.FilterRows)
  22. .EndUpdate();
  23. }
  24. public event DataModelUpdateEvent? OnUpdateDataModel;
  25. public string SectionName => "Job Equipment";
  26. public DataModel DataModel(Selection selection)
  27. {
  28. var ids = ExtractValues(x => x.ID, selection).ToArray();
  29. return new BaseDataModel<JobEquipment>(new Filter<JobEquipment>(x => x.ID).InList(ids));
  30. }
  31. protected override void Reload(Filters<JobEquipment> criteria, Columns<JobEquipment> columns, ref SortOrder<JobEquipment>? sort, Action<CoreTable?, Exception?> action)
  32. {
  33. criteria.Add(MasterDetailFilter);
  34. base.Reload(criteria, columns, ref sort, action);
  35. }
  36. protected override bool CanCreateItems()
  37. {
  38. return base.CanCreateItems() && (Master?.ID ?? Guid.Empty) != Guid.Empty;
  39. }
  40. public override JobEquipment CreateItem()
  41. {
  42. var result = base.CreateItem();
  43. result.JobLink.ID = Master?.ID ?? Guid.Empty;
  44. result.JobLink.Synchronise(Master ?? new Job());
  45. return result;
  46. }
  47. protected override void CustomiseEditor(JobEquipment[] items, DynamicGridColumn column, BaseEditor editor)
  48. {
  49. if (String.Equals(column.ColumnName, "JobLink.ID"))
  50. editor.Editable = Editable.Hidden;
  51. base.CustomiseEditor(items, column, editor);
  52. }
  53. }
  54. }