using DevExpress.Xpo; using DevExpress.XtraEditors; using Ips.Sps.Sats; using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Ips.Sps.Sigs { public partial class AdjaSatsEditCtrl : DevExpress.XtraEditors.XtraUserControl { public AdjaSatsEditCtrl() { InitializeComponent(); } public event EventHandler AdjaSatsChanged; private XPBaseCollection _adjaSatList; Type adjaSatType; public string AdjaSatText => satComboBoxEdit.Text; private void AdjaSatsEditCtrl_Load(object sender, EventArgs e) { } public void SetSatList(IList satList, string displayMember = "") { if (!string.IsNullOrWhiteSpace(displayMember)) { satComboBoxEdit.Properties.DisplayMember = displayMember; } bsAdjaSatList.DataSource = satList; } public void SetAdjaSatList(XPCollection adjaSatList) where T : AdjaSatBasic { _adjaSatList = adjaSatList; adjaSatType = typeof(T); satComboBoxEdit.EditValue = adjaSatList?.Select(m => m.SatId)?.ToList(); satComboBoxEdit.RefreshEditValue(); } private void satComboBoxEdit_EditValueChanged(object sender, EventArgs e) { if (_adjaSatList == null) return; var satIds = ((IList)satComboBoxEdit.EditValue).Cast(); var adjaSatList = _adjaSatList.Cast(); foreach (var satid in satIds) { if (!adjaSatList.Any(m => m.SatId == satid)) { var obj = Activator.CreateInstance(adjaSatType, _adjaSatList.Session) as AdjaSatBasic; obj.SatId = satid; _adjaSatList.BaseAdd(obj); } } var removeList = adjaSatList.Where(m => !satIds.Contains(m.SatId)).ToList(); removeList.ForEach(m => _adjaSatList.BaseRemove(m)); AdjaSatsChanged?.Invoke(this, EventArgs.Empty); } } }