JobEquipmentGrid.cs 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. using System;
  2. using System.Linq;
  3. using System.Threading;
  4. using Comal.Classes;
  5. using InABox.Core;
  6. using InABox.DynamicGrid;
  7. using InABox.Wpf;
  8. namespace PRSDesktop
  9. {
  10. public class JobEquipmentGrid : DynamicDataGrid<JobEquipment>, IMasterDetailControl<Job,JobEquipment>, IDataModelSource
  11. {
  12. public Job? Master { get; set; }
  13. public Filter<JobEquipment> MasterDetailFilter => (Master?.ID ?? Guid.Empty) != Guid.Empty
  14. ? new Filter<JobEquipment>(x => x.JobLink.ID).IsEqualTo(Master.ID)
  15. : new Filter<JobEquipment>().None();
  16. protected override void DoReconfigure(DynamicGridOptions options)
  17. {
  18. base.DoReconfigure(options);
  19. options.SelectColumns = true;
  20. options.FilterRows = true;
  21. }
  22. public event DataModelUpdateEvent? OnUpdateDataModel;
  23. public string SectionName => "Job Equipment";
  24. public DataModel DataModel(Selection selection)
  25. {
  26. var ids = ExtractValues(x => x.ID, selection).ToArray();
  27. return new BaseDataModel<JobEquipment>(new Filter<JobEquipment>(x => x.ID).InList(ids));
  28. }
  29. protected override void Reload(
  30. Filters<JobEquipment> criteria, Columns<JobEquipment> columns, ref SortOrder<JobEquipment>? sort,
  31. CancellationToken token, Action<CoreTable?, Exception?> action)
  32. {
  33. criteria.Add(MasterDetailFilter);
  34. base.Reload(criteria, columns, ref sort, token, 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. }