2017-08-29 15 views
0

私は、コントロールがバインディングソースを介して単純なDTOにバインドされたフォームを持っています。一つの特定のコントロールがドロップダウンリストで、結合である:データが保存された後、コンボボックスが正常に動作しない

this.cboCustomer.DataBindings.Add(new Binding("SelectedValue", this.bindingSource, "CustomerId", true, DataSourceUpdateMode.OnPropertyChanged)); 
this.cboCustomer.DataBindings.Add(new Binding("Text", this.bindingSource, "CustomerName", true, DataSourceUpdateMode.OnPropertyChanged)); 

私は、オブジェクトの2つのプロパティを更新していますので、それは2つのバインディングを持っています。

私は、イベントを持っている:

private void cboCustomer_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    var customer= cboCustomer.SelectedItem as Customer; 
    if (customer == null) 
     return; 

    myObject.AccountNumber = customer.AccountNumber; 
} 

は、私はすべての関連情報を入力して、エンティティを保存します。保存した後、私はすなわち、新しいインスタンスへのBindingSourceのデータソースを設定します。私は、ドロップダウンリストから項目を選択すると

bindingSource.DataSource = myObject = new MyObject(); 

しかし、最初の時間の後、SelectedItemプロパティは項目があるにもかかわらず、常にnullでありますリスト内の

私は別のコントロールをクリックし、そこに何かを入力してから、ドロップダウンの選択が表示されます。

何か不足していますか?

+0

'Binding'は最初に選択した値をパラメータとして追加するオーバーロードを持っていますか? – Stefan

+0

@Stefan nullValueを設定できるオーバーロードがあります(私が使用していない): –

+0

logs/debugoutputにバインドエラーがありますか? – Fildor

答えて

0

問題はコントロールの2つのバインディングでした。 Textプロパティへのバインディングが削除され、コンボボックスが正常に動作するようになりました。

1

これはWinFormsバインディングの一般的な問題です。

MyObject = new MyObject(); 
:代わりに

bindingSource.DataSource = myObject = new MyObject(); 

のその後

private MyObject myObject; 

// gets or sets the currently bound object 
public MyObject MyObject 
{ 
    get 
    { 
     return myObject; 
    } 
    set 
    { 
     myObject = value; 

     myObjectBindingSource.RaiseListChangedEvents = false; 
     myObjectBindingSource.EndEdit(); 

     // rebind 
     myObjectBindingSource.DataSource = null; 
     myObjectBindingSource.DataSource = myObject; 

     myObjectBindingSource.RaiseListChangedEvents = true; 
     myObjectBindingSource.ResetBindings(false); 
    } 
} 

そして、ちょうど新しいプロパティを設定:あなたはバインディングをリセットする必要がある可能性がある場合、それに対処するために、あなたはどこにでも次のパターンを使用することができます

+0

この解決法は私のためには機能しません。以前と同じ問題。 –

関連する問題