2011-01-03 4 views
4

複数のコンボボックスを1つのリストにバインドしようとしています。しかし、1コンボボックスで値を選択すると、リストにバインドされているすべてのComboBoxが同じ値に変わります。複数のコンボボックスを1つのリストにバインドする<>

List<Country> countryList = new List<Country>(); 
// Add contries to list. There are two properties string Name, and string Code 
comboBox1.DataSource = countryList; 
comboBox1.DisplayMember = "Name"; 
comboBox1.ValueMember = "Code"; 


comboBox2.DataSource = countryList; 
comboBox2.DisplayMember = "Name"; 
comboBox2.ValueMember = "Code"; 

ここで、comboBox1から国を選択すると、comboBox2も選択されます。私は各コンボボックスごとに別々のリストを作成したくないです。

答えて

4

申し訳ありません新しいリスト を作成する必要があります。できれば別のリストを作成するだけです。

comboBox2.DataSource = countryList.ToList(); 

それはあなたのために動作しない場合は、あなたがそのようにコンボボックスのいずれかのために別々のバインディングコンテキストを作成し、それを行うことができます

 BindingContext bcG1 = new BindingContext(); 

     comboBox1.BindingContext = bcG1; 

     comboBox1.DataSource = Countries; 
     comboBox1.DisplayMember = "Name"; 
     comboBox1.ValueMember = "Code"; 

     comboBox2.DataSource = Countries; 
     comboBox2.DisplayMember = "Name"; 
     comboBox2.ValueMember = "Code"; 
+1

選択肢として使用したいシングルトンのリストがあった場合はどうなりますか?データバインディングでは、問題の原因となっているリスト内部のカウンタを使用しているようです。この機能を個別に実行できるデータバインディングオブジェクトはありませんか? – galford13x

+0

@ galford13xあなたは正しいです、私は今日何か新しいことを学びました。私はこれを反映する答えを更新しました。 –

+2

+1:ああ、私はBindingContextを忘れていました。それはまさに私が探していたものです。 – galford13x

1

唯一のペアの場合は、のようにすることができますこの:

comboBox1.DataSource = Countries; 
comboBox1.DisplayMember = "Name"; 
comboBox1.ValueMember = "Code"; 

comboBox2.DataSource = Countries; 
comboBox2.BindingContext = new BindingContext(); 
comboBox2.DisplayMember = "Name"; 
comboBox2.ValueMember = "Code"; 

以上、または切り抜いた形で存在する場合は、より良い公共の場でMethodeのを作成します。

public ComboBox bindCombo(ComboBox _cb, DataTable _dt) 
{ 
    _cb.DataSource = _dt; 
    _cb.BindingContext = new BindingContext(); 
    _cb.ValueMember = _dt.Columns[0].ToString(); 
    _cb.DisplayMember = _dt.Columns[0].ToString(); 
    return _cb; 
} 
関連する問題