2011-02-08 8 views
2

私が持っている:私はcmbx1から何かを選択するとつのテーブルと2コンボボックスは

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" 

がそう、それはまたcmbx2で選択されています。どうしてこれなの?

同じ値を取得するにはcmbx2のdtのコピーが必要ですが、独立に選択できますか?

+0

あなたの情報は本当にうんざりですが、両方のデータソースに同じコレクションを割り当てると、両方のコンボボックスが同期されると思います。かつてWPF Datagridで私に起こったので、それを試してみる価値があります。 – Machinarius

答えて

4

同じオブジェクトへの参照があるからです。

dt.Copy()を使用して問題を解決してください。

このDataTableと同じ構造(テーブルスキーマと制約)とデータを持つ新しいDataTable。 これらのクラスが派生している場合、コピーも同じ派生クラスになります。 CopyメソッドとCloneメソッドの両方で、元のDataTableと同じ構造の新しいDataTableが作成されます。 Copyメソッドで作成された新しいDataTableには、元のテーブルと同じDataRowのセットがありますが、Cloneメソッドで作成された新しいDataTableにはDataRowが含まれていません。

+0

はい、私はdt.Copy()がより適切だと思います – johnny

+0

確かに。私のポストをMSDNの説明で編集して、クローンの代わりにコピーを使用する理由を説明しました。 – Koen

+0

ありがとうコーエン。 – johnny

関連する問題