DeletedEntityGrid.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. using FastReport;
  2. using InABox.Core;
  3. using InABox.Database;
  4. using InABox.DynamicGrid;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Reflection;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using System.Windows.Forms;
  12. namespace PRSServer.Forms
  13. {
  14. class DeletedEntityGrid<T> : DynamicGrid<T>, ISpecificGrid where T : Entity, new()
  15. {
  16. private CoreTable Table { get; set; }
  17. public DeletedEntityGrid(CoreTable table)
  18. {
  19. Table = table;
  20. HiddenColumns.Add(x => x.ID);
  21. }
  22. protected override void Init()
  23. {
  24. }
  25. protected override void DoReconfigure(FluentList<DynamicGridOption> options)
  26. {
  27. options.BeginUpdate().Clear()
  28. .AddRange(DynamicGridOption.EditRows).EndUpdate();
  29. }
  30. protected override DynamicGridColumns LoadColumns()
  31. {
  32. var result = base.LoadColumns();
  33. var deletionColumns = DeletionData.DeletionColumns<T>();
  34. var columns = new DynamicGridColumns();
  35. foreach(var column in deletionColumns.GetColumns())
  36. {
  37. var resultColumn = result.FirstOrDefault(x => x.ColumnName == column.Property);
  38. if(resultColumn is not null)
  39. {
  40. columns.Add(resultColumn);
  41. }
  42. }
  43. if(columns.Count == 0)
  44. {
  45. columns.Add<T, Guid>(x => x.ID, 0, "ID", "", Alignment.MiddleLeft);
  46. }
  47. return columns;
  48. }
  49. protected override void Reload(Filters<T> criteria, Columns<T> columns, ref SortOrder<T>? sort, Action<CoreTable?, Exception?> action)
  50. {
  51. try
  52. {
  53. action(Table, null);
  54. }
  55. catch(Exception e)
  56. {
  57. action(null, e);
  58. }
  59. }
  60. protected override T LoadItem(CoreRow row)
  61. {
  62. return Table.Rows[row.Index].ToObject<T>();
  63. }
  64. protected override void DoEdit()
  65. {
  66. if (!SelectedRows.Any())
  67. return;
  68. var item = LoadItem(SelectedRows.First());
  69. var editor = new DynamicEditorForm(typeof(T));
  70. editor.ReadOnly = true;
  71. editor.OnCustomiseColumns += Editor_OnCustomiseColumns;
  72. editor.OnDefineLookups += sender => DefineLookups(sender, Array.Empty<T>());
  73. editor.Items = new BaseObject[] { item };
  74. editor.ShowDialog();
  75. }
  76. private void Editor_OnCustomiseColumns(object sender, DynamicGridColumns columns)
  77. {
  78. columns.Clear();
  79. columns.ExtractColumns(typeof(T));
  80. var deletionColumns = DeletionData.DeletionColumns<T>();
  81. columns.RemoveAll(x => !deletionColumns.GetColumns().Any(y => y.Property == x.ColumnName));
  82. }
  83. public override void SaveItem(T item)
  84. {
  85. // No saving allowed
  86. }
  87. protected override void DeleteItems(params CoreRow[] rows)
  88. {
  89. // No deleting allowed
  90. }
  91. }
  92. }