2011-02-08 3 views
2

у меня есть:один стол и два ComboBoxes

Dim ds As DataSet = New DataSet 
Dim dt As DataTable = New DataTable 
adapter.Fill(ds, "Table") 
dt = ds.Tables("Table") 

cmbx1.DataSource = dt 
cmbx1.DisplayMember = "field1" 
cmbx1.ValueMember = "field2" 

cmbx2.DataSource = dt 
cmbx2.DisplayMember = "field1" 
cmbx2.ValueMember = "field2" 

Так что, когда я выбираю что-то из cmbx1 он также выбран в cmbx2. Почему это?

Нужна ли мне копия dt для cmbx2 для получения одинаковых значений, но выбирается независимо?

+0

Ваша информация действительно перепутана, но я думаю, что если вы назначите одну и ту же коллекцию для обоих данных, оба combobox будут синхронизированы. Случилось со мной однажды с WPF Datagrid, так что, возможно, стоит попробовать. – Machinarius

ответ

4

Это потому, что у них есть ссылка на один и тот же объект.

Используйте dt.Copy(), чтобы решить эту проблему.

Новый DataTable с такой же структурой (схемы таблиц и ограничений) и данными, как этот DataTable. Если эти классы были получены, копия также будет иметь одни и те же производные классы. Оба метода копирования и клонирования создают новый DataTable с той же структурой, что и исходный DataTable. Новый DataTable, созданный методом Copy, имеет тот же набор DataRows, что и исходная таблица, но новый DataTable, созданный методом Clone, не содержит никаких DataRows.

+0

Да, но я думаю, что dt.Copy() более подходит – johnny

+0

Действительно. Отредактировано мое сообщение с объяснением MSDN, почему использовать Copy вместо Clone. – Koen

+0

Спасибо, Коэн. – johnny

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