когда я изменяю combobox1, он также меняет значения в combobox2 (оба используют один и тот же список)

Вопрос: У меня 2 combobox на моей winform. Оба списка со списком загружаются в списке ниже. Все работает нормально. Кроме того, когда я изменяю значение в Combobox1, оно также меняет значение в combobox2... и то же самое для других combobox. Когда я изменяю значение в combobox 2, он изменяется в combobox1.... Оба должны использовать один

Вопрос:

У меня 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»;

Оцените статью
Добавить комментарий