QuoteCostSheetsGrid.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. using System;
  2. using System.Linq;
  3. using System.Windows.Automation.Peers;
  4. using Comal.Classes;
  5. using InABox.Core;
  6. using InABox.DynamicGrid;
  7. using InABox.Wpf;
  8. namespace PRSDesktop
  9. {
  10. public class QuoteCostSheetGrid : DynamicDataGrid<QuoteCostSheet>, IMasterDetailControl<Quote,QuoteCostSheet>
  11. {
  12. public Quote? Master { get; set; }
  13. public Filter<QuoteCostSheet> MasterDetailFilter => Master != null && Master.ID != Guid.Empty
  14. ? new Filter<QuoteCostSheet>(x => x.Quote.ID).IsEqualTo(Master.ID)
  15. : new Filter<QuoteCostSheet>().None();
  16. public QuoteCostSheetGrid()
  17. {
  18. OnCustomiseEditor += CustomiseEditor;
  19. HiddenColumns.Add(x => x.CostSheet.ID);
  20. }
  21. protected override void DoReconfigure(FluentList<DynamicGridOption> options)
  22. {
  23. base.DoReconfigure(options);
  24. options.AddRange(DynamicGridOption.RecordCount, DynamicGridOption.SelectColumns);
  25. }
  26. public override DynamicGridColumns GenerateColumns()
  27. {
  28. var columns = new DynamicGridColumns();
  29. columns.Add<QuoteCostSheet, String>(x => x.Description, 0, "Description", "", Alignment.MiddleCenter);
  30. return columns;
  31. }
  32. private void CustomiseEditor(IDynamicEditorForm sender, QuoteCostSheet[]? items, DynamicGridColumn column, BaseEditor editor)
  33. {
  34. if (column.ColumnName.Equals("CostSheet.ID"))
  35. editor.Editable = items?.FirstOrDefault()?.CostSheet.IsValid() != true ? Editable.Enabled : Editable.Disabled;
  36. }
  37. protected override void Reload(Filters<QuoteCostSheet> criteria, Columns<QuoteCostSheet> columns, ref SortOrder<QuoteCostSheet>? sort,
  38. Action<CoreTable?, Exception?> action)
  39. {
  40. criteria.Add(MasterDetailFilter);
  41. base.Reload(criteria, columns, ref sort, action);
  42. }
  43. protected override bool CanCreateItems()
  44. {
  45. return base.CanCreateItems() && (Master?.ID ?? Guid.Empty) != Guid.Empty;
  46. }
  47. protected override QuoteCostSheet CreateItem()
  48. {
  49. var result = base.CreateItem();
  50. result.Quote.ID = Master?.ID ?? Guid.Empty;
  51. result.Quote.Synchronise(Master ?? new Quote());
  52. return result;
  53. }
  54. }
  55. }