BindingSource
をクラスオブジェクトのリストに接続してから、オブジェクトの値をComboBoxに接続します。
誰でもそれを行う方法を提案できますか?
public class Country
{
public string Name { get; set; }
public IList<City> Cities { get; set; }
public Country()
{
Cities = new List<City>();
}
}
私のクラスであり、そのname
フィールドをComboBoxに関連付けることができるBindingSourceにバインドしたい
コンボボックスを参照しているので、2方向のデータバインディングを使用したくないと仮定しています(そうであれば、BindingList
の使用を見てください)
public class Country
{
public string Name { get; set; }
public IList<City> Cities { get; set; }
public Country(string _name)
{
Cities = new List<City>();
Name = _name;
}
}
List<Country> countries = new List<Country> { new Country("UK"),
new Country("Australia"),
new Country("France") };
bindingSource1.DataSource = countries;
comboBox1.DataSource = bindingSource1.DataSource;
comboBox1.DisplayMember = "Name";
comboBox1.ValueMember = "Name";
バインドされたコンボボックスで選択された国を見つけるには、次のようにします:Country country = (Country)comboBox1.SelectedItem;
。
ComboBoxを動的に更新する場合は、DataSource
として設定したデータ構造がIBindingList
を実装していることを確認する必要があります。そのような構造の1つはBindingList<T>
です。
ヒント:DisplayMember
をパブリックフィールドではなく、クラスのプロパティにバインドしていることを確認してください。クラスがpublic string Name { get; set; }
を使用する場合は動作しますが、public string Name;
を使用する場合は値にアクセスできず、代わりにコンボボックスの各行のオブジェクトタイプを表示します。
バックグラウンダーには、ComboBox/ListBoxを使用する2つの方法があります
1)CountryオブジェクトをItemsプロパティに追加し、国をSelecteditemとして取得します。これを使用するには、国のToStringをオーバーライドする必要があります。
2)DataBindingを使用し、DataSourceをIList(List <>)に設定し、DisplayMember、ValueMember、およびSelectedValueを使用します
2)最初に国のリストが必要になります
// not tested, schematic:
List<Country> countries = ...;
...; // fill
comboBox1.DataSource = countries;
comboBox1.DisplayMember="Name";
comboBox1.ValueMember="Cities";
そして、SelectionChangedで、
if (comboBox1.Selecteditem != null)
{
comboBox2.DataSource=comboBox1.SelectedValue;
}
public MainWindow(){
List<person> personList = new List<person>();
personList.Add(new person { name = "rob", age = 32 } );
personList.Add(new person { name = "annie", age = 24 } );
personList.Add(new person { name = "paul", age = 19 } );
comboBox1.DataSource = personList;
comboBox1.DisplayMember = "name";
comboBox1.SelectionChanged += new SelectionChangedEventHandler(comboBox1_SelectionChanged);
}
void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
person selectedPerson = comboBox1.SelectedItem as person;
messageBox.Show(selectedPerson.name, "caption goes here");
}
ブーム。
次のようなものを試してください:
yourControl.DataSource = countryInstance.Cities;
WebFormsを使用している場合は、次の行を追加する必要があります。
yourControl.DataBind();
public class Country
{
public string Name { get; set; }
public IList<City> Cities { get; set; }
public Country()
{
Cities = new List<City>();
}
}
public class City
{
public string Name { get; set; }
}
List<Country> Countries = new List<Country>
{
new Country
{
Name = "Germany",
Cities =
{
new City {Name = "Berlin"},
new City {Name = "Hamburg"}
}
},
new Country
{
Name = "England",
Cities =
{
new City {Name = "London"},
new City {Name = "Birmingham"}
}
}
};
bindingSource1.DataSource = Countries;
member_CountryComboBox.DataSource = bindingSource1.DataSource;
member_CountryComboBox.DisplayMember = "Name";
member_CountryCombo
Box.ValueMember = "Name";
これは私が現在使用しているコードです。