Вопрос:
У меня 2 combobox на моей winform. Оба списка со списком загружаются в списке ниже. Все работает нормально. Кроме того, когда я изменяю значение в Combobox1, оно также меняет значение в combobox2… и то же самое для других combobox. Когда я изменяю значение в combobox 2, он изменяется в combobox1….
Оба должны использовать один и тот же список значений. так что причина, по которой я просто привязываюсь к тому же списку (_item).
так что мне нужно сделать, чтобы отделить 2 combobox друг от друга?
IList<CompteGeneral> _item = new List<CompteGeneral>(compt_repository.GetAll); combobox1.DataSource = _item; combobox1.DisplayMember = «AccountNumber»; combobox2.DataSource = _item; combobox2.DisplayMember = «AccountNumber»; Лучший ответ:
реализовать метод Clone из интерфейса ICloneable на CompteGeneral
IList<CompteGeneral> _item = new List<CompteGeneral>(compt_repository.GetAll); combobox1.DataSource = _item; combobox1.DisplayMember = «AccountNumber»; combobox2.DataSource = _item.Select(p => p.Clone()).ToList(); combobox2.DisplayMember = «AccountNumber»;
Также ищите парадигмы ShallowCopy и DeepCopy при клонировании объектов.
Ответ №1IList<CompteGeneral> _item = new List<CompteGeneral>(compt_repository.GetAll); IList<CompteGeneral> _item1 = new List<CompteGeneral>(compt_repository.GetAll); combobox1.DataSource = _item; combobox1.DisplayMember = «AccountNumber»; combobox2.DataSource = _item1; combobox2.DisplayMember = «AccountNumber»;
или
IList<CompteGeneral> _item = new List<CompteGeneral>(compt_repository.GetAll); BindingSource source=new BindingSource(); source.DataSource=_item ; BindingSource source1=new BindingSource(); source1.DataSource=_item ; combobox1.DataSource = source; combobox1.DisplayMember = «AccountNumber»; combobox2.DataSource = source1; combobox2.DisplayMember = «AccountNumber»;
пример
Ответ №2
Создайте новый список с тем же элементом, передав _item1 в конструкторе.
Назначьте новый список второму Combobox.
IList<CompteGeneral> _item1 = new List<CompteGeneral>(compt_repository.GetAll); IList<CompteGeneral> _item2 = new List<CompteGeneral>(_item1); combobox1.DataSource = _item1; combobox1.DisplayMember = «AccountNumber»; combobox2.DataSource = _item2; combobox2.DisplayMember = «AccountNumber»;