проблема с двумя элементами управления, имеющими один и тот же источник данных - PullRequest
3 голосов
/ 30 октября 2009

Я создаю приложение winforms, у меня есть два комбинированных списка, которые имеют одинаковый источник данных, источник данных - DataTable. Теперь, когда я выбираю значение в одном comboBox, значение другого comboBox также изменяется. Есть ли способ изменить это, не влияя на других?

Ответы [ 2 ]

1 голос
/ 28 мая 2010

Система привязки WinForms обнаруживает, что оба комбинированных списка подключены к одному и тому же источнику данных и (полезно) синхронизирует изменения между ними.

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

Одним из способов является использование соответствующего невизуального компонента из панели инструментов ( BindingSource ).

Другое, если вы устанавливаете привязки с помощью кода, это использовать BindingList . Обратите внимание, что существует одна ловушка с BindingList - она ​​ может действовать как оболочка :

[] Конструктор BindingList создает коллекцию WRAPPER вокруг исходного списка. Он не создает новый список, содержащий те же элементы. (Я никогда не видел это задокументировано, но проверил с помощью Reflector). - http://www.nichesoftware.co.nz/blog/200809/databinding-lists

Вместо:

editDebitAccount.DataSource = accountsList;
editCreditAccount.DataSource = accountsList;

используйте это:

editDebitAccount.DataSource = new BindingList(accountsList);
editCreditAccount.DataSource = new BindingList(accountsList);
1 голос
/ 01 ноября 2009

В этом типе сценария вы можете создать два разных источника привязки, по одному для каждого из ваших полей со списком. Если вы установите для свойства DataSource каждого из источников данных привязки значение DataTable, то ваши комбинированные списки будут работать независимо, при этом все равно показывая те же данные.

Инициализация будет выглядеть примерно так:

// Initialization of the binding sources(assuming dataTable is a populated DataTable)
bindingSource.DataSource = dataTable;
bindingSource2.DataSource = dataTable;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...