2016-05-01 63 views
2

我有困難的簡單對象綁定到一個ComboBox如下:的WinForms組合框綁定整個對象(無數據成員)

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

我要綁定到整個visiteur對象,因此更新爲下拉框中selectedValue更改。 目前,selectedValue變化,但不是visiteur對象。我在這裏做錯了什麼?

SOLUTION: 使用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; 
    } 
+0

更改爲'comboBox1.DataBindings.Add(「SelectedValue」,this,「visiteur」,true,DataSourceUpdateMode.OnPropertyChanged);' – Fabio

+0

我已經嘗試過並且出現此錯誤:_Cannot綁定到數據的屬性或列visiteur由Object創建的源代碼._ – Nerimah

+0

目前接受的答案是完全錯誤的。使你的'visiteur **'屬性**,然後使用@Fabio代碼。 –

回答

3

Crowcoder的答案將設置visiteurcomboBox1.SelectedItem只有一次。這就是爲什麼你需要手動使用由SelectedIndexChanged

更新你可以做適當的數據綁定(感謝伊萬Stoev的評論),如果您更改成員visiteur一個屬性

public VisiteVisiteur visiteur { get; set; } 

然後設置數據綁定

comboBox1.DataSource = visiteurs; 
comboBox1.DisplayMember = "Name"; 
comboBox1.DataBindings.Add("SelectedValue", 
          this, 
          "visiteur", 
          true, 
          DataSourceUpdateMode.OnPropertyChanged); 

如果您仍然保持手動更新visiteur然後使用SelectionChangesCommitted事件而不是SelectedIndexChanged

0

使用DataSource已經設置綁定。你不希望添加其他的,你要設置的SelectedItem它是對象實例:

comboBox1.DataSource = visiteurs; 
comboBox1.DisplayMember = "Name"; 
comboBox1.SelectedItem = visiteur; 
+0

你的代碼只做一半的工作,因爲我想** visiteur **自動將它的值更改爲comboBox selectedValue – Nerimah

+0

@Nerimah,'visiteur'是值。你什麼意思? – Crowcoder

+0

不,visiteur是綁定到組合框的變量,它需要採用comboBox1.selectedValue – Nerimah

相關問題