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());