[c#] 목록을 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 에 바인딩하고 싶습니다.



답변

콤보 상자를 언급 할 때 양방향 데이터 바인딩을 사용하고 싶지 않다고 가정합니다 (그렇다면를 사용하여보십시오 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") };

var bindingSource1 = new BindingSource();
bindingSource1.DataSource = countries;

comboBox1.DataSource = bindingSource1.DataSource;

comboBox1.DisplayMember = "Name";
comboBox1.ValueMember = "Name";

바인딩 된 콤보 상자에서 선택한 국가를 찾으려면 다음과 같이하십시오 Country country = (Country)comboBox1.SelectedItem;..

ComboBox가 동적으로 업데이트되도록하려면 설정 한 데이터 구조가 다음을 DataSource구현 하는지 확인해야합니다 IBindingList. 그러한 구조 중 하나는 BindingList<T>.


팁 : DisplayMember공용 필드가 아닌 클래스의 속성 에을 바인딩하고 있는지 확인하십시오 . 클래스에서 사용 public string Name { get; set; }하는 경우 작동하지만 사용 public string Name;하는 경우 값에 액세스 할 수없고 대신 콤보 상자의 각 줄에 대한 개체 유형을 표시합니다.


답변

백그 라운더의 경우 ComboBox / ListBox를 사용하는 두 가지 방법이 있습니다.

1) Items 속성에 Country 개체를 추가하고 Country를 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";

이것이 제가 지금 사용하고있는 코드입니다.


답변

ToolStripComboBox를 사용하는 경우 노출 된 DataSource가 없습니다 (.NET 4.0) :

List<string> someList = new List<string>();
someList.Add("value");
someList.Add("value");
someList.Add("value");

toolStripComboBox1.Items.AddRange(someList.ToArray());


답변