DynamicManyToManyDataGrid.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Reflection;
  5. using InABox.Clients;
  6. using InABox.Core;
  7. namespace InABox.DynamicGrid
  8. {
  9. public class DynamicManyToManyDataGrid<TManyToMany, TThis> : DynamicManyToManyGrid<TManyToMany, TThis>
  10. where TManyToMany : Entity, IPersistent, IRemotable, new() where TThis : Entity, IRemotable, IPersistent, new()
  11. {
  12. private readonly PropertyInfo prop;
  13. public DynamicManyToManyDataGrid()
  14. {
  15. prop = CoreUtils.PropertyList(typeof(TManyToMany), p => p.PropertyType.IsSubclassOf(typeof(EntityLink<TThis>))).FirstOrDefault();
  16. }
  17. public Guid ID { get; set; }
  18. protected override Guid[] CurrentGuids()
  19. {
  20. var result = new List<Guid>();
  21. foreach (var row in Data.Rows)
  22. {
  23. var guid = row.Get<Guid>(otherproperty.Name + ".ID");
  24. result.Add(guid);
  25. }
  26. return result.ToArray();
  27. }
  28. protected override TManyToMany CreateItem()
  29. {
  30. var result = base.CreateItem();
  31. var link = (IEntityLink)prop.GetValue(result);
  32. link.ID = ID;
  33. return result;
  34. }
  35. protected override void Reload(Filters<TManyToMany> criteria, Columns<TManyToMany> columns, ref SortOrder<TManyToMany> sort,
  36. Action<CoreTable, Exception> action)
  37. {
  38. var expr = CoreUtils.CreateLambdaExpression<TManyToMany>(prop.Name + ".ID");
  39. criteria.Add(new Filter<TManyToMany>(expr).IsEqualTo(ID));
  40. new Client<TManyToMany>().Query(criteria.Combine(), columns, sort, action);
  41. }
  42. protected override TManyToMany LoadItem(CoreRow row)
  43. {
  44. return new Client<TManyToMany>().Load(new Filter<TManyToMany>(x => x.ID).IsEqualTo(row.Get<TManyToMany, Guid>(x => x.ID)))
  45. .FirstOrDefault();
  46. }
  47. protected override void DeleteItems(params CoreRow[] rows)
  48. {
  49. var items = LoadItems(rows);
  50. foreach (var item in items)
  51. new Client<TManyToMany>().Delete(item, "");
  52. }
  53. protected override void SaveItem(TManyToMany item)
  54. {
  55. new Client<TManyToMany>().Save(item, "");
  56. }
  57. }
  58. }