我想将一个BindingSource
连接到一个类对象列表,然后将对象值连接到一个ComboBox。
有谁能建议怎么做吗?
public class Country
{
public string Name { get; set; }
public IList<City> Cities { get; set; }
public Country()
{
Cities = new List<City>();
}
}
是我的类,我想将它的name
字段绑定到BindingSource,然后将其与ComboBox关联
7条答案
按热度按时间mdfafbf11#
由于您指的是组合框,我假定您不希望使用双向数据绑定(如果是这样,请考虑使用
BindingList
)要查找绑定组合框中选定的国家/地区,您可以执行以下操作:
Country country = (Country)comboBox1.SelectedItem;
.如果希望ComboBox动态更新,则需要确保设置为
DataSource
的数据结构实现了IBindingList
;一种这样结构是X1 M4 N1 X。提示:请确保将
DisplayMember
绑定到类的属性,而不是公共字段。如果类使用public string Name { get; set; }
,它将工作,但如果它使用public string Name;
,它将无法访问值,而是显示组合框中每行的对象类型。zqry0prt2#
对于背景,有两种方法可以使用组合框/列表框
1)将Country对象添加到Items属性并检索Country作为Selecteditem。若要使用此属性,应重写Country的ToString。
2)使用数据绑定,将数据源设置为IList(List〈〉),并使用显示成员、值成员和选定值
对于2),您首先需要一个国家/地区列表
然后在SelectionChanged中,
dsekswqp3#
轰的一声。
jv2fixgn4#
请尝试以下操作:
如果您使用的是WebForms,则需要添加以下行:
uqzxnwby5#
如果您使用的是ToolStripComboBox,则不会公开任何数据来源(.NET 4.0):
ix0qys7i6#
这是我现在使用的代码。
u5rb5r597#
作为一个小的补充,我尝试合并一些类似于此代码的内容,但令人沮丧的是,从列表中添加/删除并没有反映在ComboBox中。这是因为添加/删除没有触发OnPropertyChange。
如果要添加/删除并在组合框中反映它们,则需要将List〈〉更改为ObservableCollection
应替换为
OnPropertyChanged和ObservableCollection的来源
所有这一切都在前面的一个解释here中更雄辩地表达了