DeletedEntityGrid.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using FastReport;
  2. using InABox.Clients;
  3. using InABox.Core;
  4. using InABox.Database;
  5. using InABox.DynamicGrid;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Reflection;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. namespace PRSServer.Forms
  13. {
  14. class DeletedEntityGrid<T> : DynamicGrid<T>, ISpecificGrid where T : Entity, new()
  15. {
  16. private Deletion Deletion { get; set; }
  17. public DeletedEntityGrid(Deletion deletion)
  18. {
  19. Deletion = deletion;
  20. HiddenColumns.Add(x => x.ID);
  21. Options.BeginUpdate().Clear()
  22. .AddRange(DynamicGridOption.EditRows).EndUpdate();
  23. }
  24. protected override DynamicGridColumns LoadColumns()
  25. {
  26. var result = base.LoadColumns();
  27. result.RemoveAll(x =>
  28. {
  29. var prop = CoreUtils.GetProperty(typeof(T), x.ColumnName);
  30. return prop.GetCustomAttribute<DoNotSerialize>() != null && prop.GetCustomAttribute<DoNotPersist>() != null;
  31. });
  32. return result;
  33. }
  34. protected override void Reload(Filters<T> criteria, Columns<T> columns, ref SortOrder<T> sort, Action<CoreTable, Exception> action)
  35. {
  36. try
  37. {
  38. var table = DbFactory.Provider.QueryDeleted(Deletion, criteria.Combine(), columns, sort);
  39. action(table, null);
  40. }
  41. catch(Exception e)
  42. {
  43. action(null, e);
  44. }
  45. }
  46. protected override T LoadItem(CoreRow row)
  47. {
  48. var id = row.Get<T, Guid>(x => x.ID);
  49. var filter = new Filter<T>(x => x.ID).IsEqualTo(id);
  50. return DbFactory.Provider.QueryDeleted(Deletion, filter, null).Rows.FirstOrDefault()?.ToObject<T>();
  51. }
  52. protected override void DoEdit()
  53. {
  54. if (!SelectedRows.Any())
  55. return;
  56. var item = LoadItem(SelectedRows.First());
  57. var editor = new DynamicEditorForm(typeof(T));
  58. editor.ReadOnly = true;
  59. editor.OnDefineLookups += sender => DefineLookups(sender, Array.Empty<T>());
  60. editor.Items = new BaseObject[] { item };
  61. editor.ShowDialog();
  62. }
  63. protected override void SaveItem(T item)
  64. {
  65. // No saving allowed
  66. }
  67. protected override void DeleteItems(params CoreRow[] rows)
  68. {
  69. // No deleting allowed
  70. }
  71. }
  72. }