DynamicItemsListGrid.cs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using InABox.Core;
  2. using System;
  3. using System.Collections;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using Microsoft.CodeAnalysis.CSharp.Syntax;
  9. using Syncfusion.Windows.Tools.Controls;
  10. namespace InABox.DynamicGrid
  11. {
  12. public interface IDynamicItemsListGrid : IDynamicGrid
  13. {
  14. IEnumerable<object> Items { get; set; }
  15. }
  16. public class DynamicItemsListGrid<T> : DynamicGrid<T>, IDynamicItemsListGrid
  17. where T : BaseObject, new()
  18. {
  19. private List<T> _items = new List<T>();
  20. public List<T> Items
  21. {
  22. get => _items;
  23. set => _items = value;
  24. }
  25. IEnumerable<object> IDynamicItemsListGrid.Items
  26. {
  27. get => _items.Cast<object>();
  28. set => _items = value.OfType<T>().ToList();
  29. }
  30. protected override void DeleteItems(params CoreRow[] rows)
  31. {
  32. foreach (var row in rows.OrderByDescending(x => x.Index))
  33. {
  34. Items.RemoveAt(_recordmap[row].Index);
  35. }
  36. }
  37. protected override T LoadItem(CoreRow row)
  38. {
  39. return Items[_recordmap[row].Index];
  40. }
  41. protected override void Reload(Filters<T> criteria, Columns<T> columns, ref SortOrder<T>? sort, Action<CoreTable?, Exception?> action)
  42. {
  43. var result = new CoreTable();
  44. result.LoadColumns(typeof(T));
  45. result.LoadRows(Items);
  46. action.Invoke(result, null);
  47. }
  48. public override void SaveItem(T item)
  49. {
  50. if (!Items.Contains(item))
  51. {
  52. Items.Add(item);
  53. }
  54. }
  55. }
  56. }