web-dev-qa-db-ja.com

リストをComboBoxにバインドする方法は?

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にバインドしたい

96
Mobin

コンボボックスを参照しているので、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;を使用する場合は値にアクセスできず、代わりにコンボボックスの各行のオブジェクトタイプを表示します。

145
Mitch Wheat

バックグラウンダーには、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;

}
24
Henk Holterman
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");
}

ブーム。

20

次のようなものを試してください:

yourControl.DataSource = countryInstance.Cities;

WebFormsを使用している場合は、次の行を追加する必要があります。

yourControl.DataBind();
0
Andrew Hare
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";

これは私が現在使用しているコードです。

0
Mobin