2016-05-01 13 views
2

私は次のようにコンボボックスに単純なオブジェクトを結合難しさを持っている: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: DataSourceを使用して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

に変更しました。このエラーが発生しました:_データのプロパティまたは列visiteurにバインドできませんObject._ – Nerimah

+0

から作成されたソース現在受け入れられている回答は完全に間違っています。あなたの 'visiteur' **プロパティ**を作ってから、@Fabioコードを使用してください。 –

答えて

3

回答は一度だけcomboBox1.SelectedItemvisiteurを設定します。あなたがプロパティにメンバーvisiteur変更した場合

public VisiteVisiteur visiteur { get; set; } 

が次にデータバインディング設定あなたは適切なデータバインディング(イワンStoevのコメントのおかげで)行うことができますSelectedIndexChanged

による更新手動で使用する必要がある理由です

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

さらに、visiteurの手動更新を使用している場合は、SelectedIndexChangedの代わりにSelectionChangesCommittedイベントを使用してください。

0

がすでにバインディングを設定し更新するために、SelectedIndexChangedイベントを使用します。あなたがオブジェクトインスタンスであるSelectedItemを設定したい、別のものを追加したくない:Crowcoderの

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

あなたのコードは、** visiteur **がその値をコンボボックスselectedValueに自動的に変更したいので、作業の半分しか行いません。 – Nerimah

+0

@Nerimah、 'visiteur'は値です。どういう意味ですか? – Crowcoder

+0

いいえ、visiteurはコンボボックスの値にバインドされた変数で、comboBox1.selectedValueの値を取る必要があります。 – Nerimah

関連する問題