DynamicItemsListGrid.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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 Init()
  31. {
  32. }
  33. protected override void DoReconfigure(FluentList<DynamicGridOption> options)
  34. {
  35. }
  36. protected override void DeleteItems(params CoreRow[] rows)
  37. {
  38. foreach (var row in rows.OrderByDescending(x => x.Index))
  39. {
  40. Items.RemoveAt(_recordmap[row].Index);
  41. }
  42. }
  43. protected override T LoadItem(CoreRow row)
  44. {
  45. return Items[_recordmap[row].Index];
  46. }
  47. protected override void Reload(Filters<T> criteria, Columns<T> columns, ref SortOrder<T>? sort, Action<CoreTable?, Exception?> action)
  48. {
  49. var result = new CoreTable();
  50. result.LoadColumns(typeof(T));
  51. result.LoadRows(Items);
  52. action.Invoke(result, null);
  53. }
  54. public override void SaveItem(T item)
  55. {
  56. if (!Items.Contains(item))
  57. {
  58. Items.Add(item);
  59. }
  60. }
  61. }
  62. }