2011-01-21 6 views
0

同じデータソースから3つのコンボボックスを読み込む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 
+0

Windowsアプリケーションですか? – Novice

+0

@Jose:はい、それは窓のアプリケーションです – Tracer

+0

テーブルのインスタンスはまだ同じです – Novice

答えて

1

3つのコンボボックスがすべて同じデータソースにバインドされているため、最初のコンボボックスで値を選択すると、基礎となるデータソースの現在のレコードのインデックスが変更されます他の2つのコンボボックスはこれにバインドされているため、更新されます。

編集:舞台裏、行動の理由は、データバインディングは、.NET Frameworkで実装されている方法で行うことです - より多くの詳細な説明のためthis questionを参照してください。

解決策として、コンボボックスごとに別々のデータソースを使用する方法があります。面白いと思われる関連する質問hereがあります。

+0

あなたの説明とリンクをお寄せいただきありがとうございます。 – Tracer

0

これは、データテーブルの同じインスタンスをコンボボックスに割り当てているためです。

+0

はい、私はそれが私のやり方でそれを回避することができた理由を疑った。しかし、私はそれがそのような振る舞いを示すためには、背後で何が起こるかにもっと興味があります。私は、コンボボックス内の項目を選択しても、そのデータソースに影響を与えてはならないと考えました。 – Tracer

関連する問題