Требуется объяснение странного поведения комбобокса - PullRequest
0 голосов
/ 21 января 2011

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

Я заполняю комбо-боксы, повторяя следующий код для каждого из комбо-боксов:

'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

Ответы [ 2 ]

1 голос
/ 21 января 2011

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

Редактировать: За кулисами причина такого поведения заключается в том, как привязка данных реализована в .Net Framework - см. этот вопрос для получения более подробной информации.подробное объяснение.

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

0 голосов
/ 21 января 2011

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

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