2011-01-21 2 views
0

Я просто писал приложение для Windows, которое заполняет три комбобокса из одного источника данных. Мой источник данных - это дата.Пояснение необходимо для странного поведения combobox

Пути я заселить выпадающие списки является повторением следующего кода для каждого из Наримера:

'populate 1st combobox 
cbx1.DataSource = table 
cbx1.DisplayMember = "someColumn" 
cbx1.ValueMember = "anotherColumn" 
cbx1.SelectedIndex = Indx 

'populate 2nd combobox 
cbx2.DataSource = table 
cbx2.DisplayMember = "someColumn" 
cbx2.ValueMember = "anotherColumn" 
cbx2.SelectedIndex = Indx 

'populate 3rd combobox 
cbx3.DataSource = table 
cbx3.DisplayMember = "someColumn" 
cbx3.ValueMember = "anotherColumn" 
cbx3.SelectedIndex = Indx 

При запуске приложения, и выбрать элемент из списка, скажем, cbx1, мой выбор отражен и в cbx2 и cbx3. Я нахожу это поведение странным и буду благодарен, если кто-нибудь сможет объяснить, что здесь происходит за кулисами.

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

'populate 1st combobox 
Dim t1 as datatable = table.Copy 
cbx1.DataSource = t1 
cbx1.DisplayMember = "someColumn" 
cbx1.ValueMember = "anotherColumn" 
cbx1.SelectedIndex = Indx 

'populate 2nd combobox 
Dim t2 as datatable = table.Copy 
cbx2.DataSource = t2 
cbx2.DisplayMember = "someColumn" 
cbx2.ValueMember = "anotherColumn" 
cbx2.SelectedIndex = Indx 

'populate 3rd combobox 
Dim t3 as datatable = table.Copy 
cbx3.DataSource = t3 
cbx3.DisplayMember = "someColumn" 
cbx3.ValueMember = "anotherColumn" 
cbx3.SelectedIndex = Indx 
+0

Windows приложение? – Novice

+0

@Jose: Да, это приложение для Windows – Tracer

+0

Экземпляр таблицы все тот же – Novice

ответ

1

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

Edit: За кулисами, причина поведения с тем, как привязка данных осуществляется в рамках .Net - см this question для более подробного объяснения.

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

+0

Спасибо за ваше объяснение и ссылки, теперь мне стало ясно, – Tracer

0

Это связано с тем, что вы присвоили тот же экземпляр данных, который относится к выпадающим спискам.

+0

Да, я подозревал, что так много, поэтому я смог обойти его так, как я. Тем не менее, меня больше интересует, что происходит за кулисами, чтобы он проявлял такое поведение. Я думал, что выбор элемента в combobox не должен влиять на его источник данных. – Tracer

Смежные вопросы