2012-03-23 8 views
3

私はVS 2010でVB.Netで構築されたWinFormsアプリケーションを持っています。WInforms Combobox SelectionChangeCommittedイベントが常にSelectedValueを変更するとは限りません

With Me.cboCompany 
    .DataBindings.Clear() 
    .DataSource = Me.m_dsBidResults.Tables("Company") 
    .ValueMember = "company_id" 
    .DisplayMember = "company_name" 
    .DataBindings.Add("SelectedValue", Me.m_dsBidResults, Company.company_id") 
End With 

私が選択した会社IDでのDataGridViewをフィルタリングするcboCompany.SelectionChangeCommittedイベントを使用しています:

は、私は、フォームがロードされたときに、データソースにバインドされますコンボボックスを持つフォームを持っている

これは、ユーザーが他のコントロールにフォーカスを切り替えずにコンボボックスに戻る限り、正常に機能しているようです。フォーカスを切り替えた後、ユーザーがコンボボックスの選択をドロップダウンリスト(SelectedIndex = 0)の最初の項目に変更すると、SelectionChangeCommittedイベントが発生しますが、SelectedValueは以前選択された値に設定されたままになります。上記のイベントハンドラにSelectedIndexとSelectedValueを並べて表示するメッセージボックスを追加することでこれを確認しました。

'add this to SelectionChangeCommitted event handler 
MsgBox(String.Format("Selected Index: {0}, Selected Value: {1}", cboCompany.SelectedIndex, cboCompany.SelectedValue)) 

これは、ユーザーがSelectedIndexを0以外の値に変更した場合は発生しません。すべてが期待どおりに動作します。私は、バインドするテーブルにcompany_idとcompany_nameの一意の値が含まれていることを確認しました。

SelectedValueが実際に変更されたことを確認するには、別のイベントを使用する必要がありますか?あるいは、信頼できる回避策のアイデアを歓迎します。

+0

は、あなたが他のイベントを試してみましたあなたはSelectedValueChangedを与えることができますし、アイテムがから選択されたときに火災ことSelectionChangeCommittedイベントの代わりに行くのSelectedIndexChangedを作りますドロップダウンリストが閉じていますか? –

+0

Jeremy - はい、私は同じ結果でSelectedIndexChangedとSelectedValueChangedを試しました。 – heydean

答えて

2

フォームからこの行を削除し、Explanantion再び

.DataBindings.Add("SelectedValue", Me.m_dsBidResults, Company.company_id") 

を試してみてください:このコードを
はそのSelectedValueの財産は、データセットののcompany_idにバインドする必要があることcombobxに語りました。あなたがすでにデータソースを設定してリストを追加し、貴重なメンバーと表示メンバーが何であるかを言ったので、これは役に立ちません。次に、SelectionChangeCommittedイベントを使用して値が変更されたときに行うべきことについて、独自のロジックを実装しました。 削除した余分な行は、他のバウンドオブジェクト、例えば、彼が働いている会社で表示されているプロパティを持つPerson型の場合にのみ有効です。このシナリオでは、コンボボックスが変更されたときに、select company_idをPersonオブジェクトにプッシュする必要があります。

personBindingsource1.DataSource = somePerson; 
cboCompany.DataBindings.Add("SelectedValue", personBindingsource1, "WorksAtCompany") 

ような何かがうまくいけば、それは今、いくつかのより多くの意味:)

+0

偉大な、それはうまくいった、少なくとも私の目的のために、コード行は無関係だった。それでも、根本的な理由を理解してもらいたい。 – heydean

関連する問題