C# Winforms组合框数据绑定整个对象(无数据成员)
我很难将简单对象绑定到组合框,如下所示:C# Winforms组合框数据绑定整个对象(无数据成员),c#,winforms,data-binding,combobox,C#,Winforms,Data Binding,Combobox,我很难将简单对象绑定到组合框,如下所示: public partial class Planning : Form { private static BindingList<VisiteVisiteur> visiteurs = new BindingList<VisiteVisiteur>(Program.model.VisiteVisiteur.ToList()); public VisiteVisiteur visiteur = visiteurs.
public partial class Planning : Form
{
private static BindingList<VisiteVisiteur> visiteurs = new BindingList<VisiteVisiteur>(Program.model.VisiteVisiteur.ToList());
public VisiteVisiteur visiteur = visiteurs.Last();
public Planning()
{
InitializeComponent();
comboBox1.DataSource = visiteurs;
comboBox1.DisplayMember = "Name";
comboBox1.DataBindings.Add("SelectedValue", visiteur, "", true, DataSourceUpdateMode.OnPropertyChanged);
公共部分课程计划:表格
{
private static BindingList visiteurs=新的BindingList(Program.model.VisiteVisiteur.ToList());
public visiteur visiteur=visiteurs.Last();
公共规划()
{
初始化组件();
comboBox1.DataSource=访问者;
comboBox1.DisplayMember=“Name”;
comboBox1.DataBindings.Add(“SelectedValue”,visiteur,”,true,DataSourceUpdateMode.OnPropertyChanged);
我想绑定到整个visiteur对象,这样它会随着组合框selectedValue的更改而更新。
此时,selectedValue更改,但visiteur对象没有更改。我在这里做错了什么
解决方案:
使用SelectedIndexChanged事件更新visiteur变量
public partial class Planning : Form
{
private static BindingList<VisiteVisiteur> visiteurs = new BindingList<VisiteVisiteur>(Program.model.VisiteVisiteur.ToList());
public VisiteVisiteur visiteur = null;
public Planning()
{
InitializeComponent();
VisiteVisiteur visiteurTemp = visiteurs.Last();
comboBox1.SelectedIndexChanged += new System.EventHandler(comboBox1_SelectedIndexChanged);
comboBox1.DataSource = visiteurs;
comboBox1.DisplayMember = "Name";
comboBox1.SelectedItem = visiteurTemp;
}
public void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
visiteur = (VisiteVisiteur)comboBox1.SelectedItem;
}
公共部分课程计划:表格
{
private static BindingList visiteurs=新的BindingList(Program.model.VisiteVisiteur.ToList());
公共访问者visiteur visiteur=null;
公共规划()
{
初始化组件();
VisiteVisiteur visiteurTemp=visiteurs.Last();
comboBox1.SelectedIndexChanged+=新系统.EventHandler(comboBox1\u SelectedIndexChanged);
comboBox1.DataSource=访问者;
comboBox1.DisplayMember=“Name”;
comboBox1.SelectedItem=visiteurTemp;
}
public void组合框1\u SelectedIndexChanged(对象发送方,事件参数e)
{
visiteur=(VisiteVisiteur)组合框1.SelectedItem;
}
使用DataSource
已设置绑定。如果不想添加另一个绑定,则需要设置对象实例的SelectedItem
:
comboBox1.DataSource = visiteurs;
comboBox1.DisplayMember = "Name";
comboBox1.SelectedItem = visiteur;
Crowcoder的答案将
visiteur
设置为comboBox1。只选择一次EdItem
。这就是为什么您需要使用手动更新SelectedIndexChanged
如果将成员visiteur
更改为属性,则可以进行适当的数据绑定(感谢Ivan Stoev的评论)
public VisiteVisiteur visiteur { get; set; }
然后设置数据绑定
comboBox1.DataSource = visiteurs;
comboBox1.DisplayMember = "Name";
comboBox1.DataBindings.Add("SelectedValue",
this,
"visiteur",
true,
DataSourceUpdateMode.OnPropertyChanged);
如果您仍在手动更新
visiteur
,请使用SelectionChangesCommitted
事件,而不是SelectedIndexChanged
更改为combox1.DataBindings.Add(“SelectedValue”,这是“visiteur”,true,DataSourceUpdateMode.OnPropertyChanged)
我已经尝试过并得到了这个错误:无法绑定到从对象创建的数据源上的属性或列visiteur。当前接受的答案完全错误。请使用visiteur
属性,然后使用@Fabio code。您的代码只做了一半的工作,因为我希望visiteur自动将其值更改为组合盒子selectedValue@Nerimah,visiteur
是值。什么意思?不,visiteur是绑定到combobox值的变量,它需要取comboBox1的值。selectedValue@Nerimah,我认为您不了解组合框是如何工作的。如果我了解您,则您需要在co的selectedindexchanged事件中执行的所有操作MBOBOX被设置为<代码> VisteUr= COMBOBOX1,SelectedItem;< /Cord> @ Nelimar,如果正确答案是正确的,对于未来的Google来说更好。考虑不接受我的。