Пропустить поведение на .Net Controls свойство DataSource - PullRequest
1 голос
/ 29 октября 2009

У меня есть приложение WinForm с сеткой, которая содержит ComboBox в каждой строке. Все привязаны к одной коллекции (коллекция может измениться, поэтому я не хочу иметь разные коллекции для каждой комбинации, а также стоимость памяти). Проблема в том, что когда я выбираю какой-либо объект в одном комбо, он меняет выбранный объект в каждом комбо. Вот код, который вы можете запустить и легко воспроизвести.

public Form1()
        {
           InitializeComponent();

            this.comboBox1 = new System.Windows.Forms.ComboBox();
            List<int> numList = new List<int>(){1,2,3,4};
            this.comboBox1.FormattingEnabled = true;
            this.comboBox1.Location = new System.Drawing.Point(33, 169);
            this.comboBox1.Name = "comboBox1";
            this.comboBox1.Size = new System.Drawing.Size(126, 21);
            this.comboBox1.TabIndex = 3;
            this.comboBox1.DataSource = numList;   // BINDING TO NUMLIST

            this.comboBox2 = new System.Windows.Forms.ComboBox();
            this.comboBox2.FormattingEnabled = true;
            this.comboBox2.Location = new System.Drawing.Point(243, 367);
            this.comboBox2.Name = "comboBox2";
            this.comboBox2.Size = new System.Drawing.Size(126, 21);
            this.comboBox2.TabIndex = 4;
            this.comboBox2.DataSource = numList; // BINDING TO NUMLIST ( THE SAME LIST

            this.Controls.Add(this.comboBox2);
            this.Controls.Add(this.comboBox1);
        }

Просто создайте форму и вставьте декларацию ComboBox 1 и 2. Любая идея, как это может происходить. Я имею в виду, что если это простой список, он не отслеживает выбранный объект. Что происходит за источником данных?

Ответы [ 4 ]

5 голосов
/ 29 октября 2009

Вам нужно использовать отдельные списки, если вы привязываетесь к одним и тем же спискам, это ожидаемое поведение.

4 голосов
/ 29 октября 2009

Валютный менеджер используется совместно, если вы используете одну и ту же ссылку на источник данных. Одна хитрость заключается в установке привязки контекста для каждого элемента управления:

ctrl.BindingContext = new BindingContext();

Другим вариантом является использование разностных ссылок, например, путем абстрагирования через различные BindingSource для каждого элемента управления.

1 голос
/ 29 октября 2009

Читать это: Привязка данных в .NET / C # Windows Forms

Вы найдете поведение, которое вы видите, на самом деле правильным. Именно CurrencyManager является основной причиной.

0 голосов
/ 29 октября 2009

Если вы хотите связать, используйте метод linq ToList(). Это создаст новый список, поэтому они станут не связанными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...