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

Вопрос:

У меня 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 при клонировании объектов.

Ответ №1
IList<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";

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