AdjaSatsEditCtrl.cs 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. using DevExpress.Xpo;
  2. using DevExpress.XtraEditors;
  3. using Ips.Sps.Sats;
  4. using System;
  5. using System.Collections;
  6. using System.Collections.Generic;
  7. using System.ComponentModel;
  8. using System.Data;
  9. using System.Drawing;
  10. using System.Linq;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. using System.Windows.Forms;
  14. namespace Ips.Sps.Sigs
  15. {
  16. public partial class AdjaSatsEditCtrl : DevExpress.XtraEditors.XtraUserControl
  17. {
  18. public AdjaSatsEditCtrl()
  19. {
  20. InitializeComponent();
  21. }
  22. public event EventHandler AdjaSatsChanged;
  23. private XPBaseCollection _adjaSatList;
  24. Type adjaSatType;
  25. public string AdjaSatText => satComboBoxEdit.Text;
  26. private void AdjaSatsEditCtrl_Load(object sender, EventArgs e)
  27. {
  28. }
  29. public void SetSatList(IList<Sat> satList, string displayMember = "")
  30. {
  31. if (!string.IsNullOrWhiteSpace(displayMember))
  32. {
  33. satComboBoxEdit.Properties.DisplayMember = displayMember;
  34. }
  35. bsAdjaSatList.DataSource = satList;
  36. }
  37. public void SetAdjaSatList<T>(XPCollection<T> adjaSatList) where T : AdjaSatBasic
  38. {
  39. _adjaSatList = adjaSatList;
  40. adjaSatType = typeof(T);
  41. satComboBoxEdit.EditValue = adjaSatList?.Select(m => m.SatId)?.ToList();
  42. satComboBoxEdit.RefreshEditValue();
  43. }
  44. private void satComboBoxEdit_EditValueChanged(object sender, EventArgs e)
  45. {
  46. if (_adjaSatList == null) return;
  47. var satIds = ((IList)satComboBoxEdit.EditValue).Cast<int>();
  48. var adjaSatList = _adjaSatList.Cast<AdjaSatBasic>();
  49. foreach (var satid in satIds)
  50. {
  51. if (!adjaSatList.Any(m => m.SatId == satid))
  52. {
  53. var obj = Activator.CreateInstance(adjaSatType, _adjaSatList.Session) as AdjaSatBasic;
  54. obj.SatId = satid;
  55. _adjaSatList.BaseAdd(obj);
  56. }
  57. }
  58. var removeList = adjaSatList.Where(m => !satIds.Contains(m.SatId)).ToList();
  59. removeList.ForEach(m => _adjaSatList.BaseRemove(m));
  60. AdjaSatsChanged?.Invoke(this, EventArgs.Empty);
  61. }
  62. }
  63. }