私は作品注文のキャプチャフォームを持っていて、CustomerBindingSource
とWorksOrderBindingSource
のコントロールを持っています。ほとんどの編集フィールドはWorksOrderBindingSource
にバインドされ、そのリストはCustomerBindingSource
にバインドされ、そのSelectedValue
はWorksOrderBindingSource
のCustomerId
フィールドにバインドされています。これはすべて非常に日常的で標準的なものであり、ここでは面白さはありません。BindingSourceカレントレコードをnullに設定するにはどうすればよいですか?
次に、現在選択されている顧客のプロパティを表示するために、現在編集されているワークオーダーのテキストボックスフィールドがあります。これらのフィールドはCustomerBindingSource
にもバインドされています。顧客が選択されると、これらのフィールドにはその顧客のプロパティが期待通りに表示されます。
私の問題は、フォームを使用して新しい作品注文を取りたい場合です。新しいWorksOrder
オブジェクトをCustomerId == null
でインスタンス化し、WorksOrderBindingSource
にバインドします。 にはId == null
というオブジェクトがありません。したがって、ドロップダウンコンボボックスは空白ですが、CustomerBindingSource.Current
プロパティはそのデータソース内の最初のCustomerオブジェクトを指しています。顧客リンクの表示フィールドにはその顧客の値が表示されますが、まだ選択されていない顧客はありません。
これは私には明らかな唯一の回避策は不器用なようです。その中には、2つのCustomer型付きバインディング・ソースがあります.1つは選択した顧客用で、もう1つはカスタマー・ディスプレイ・フィールドへの入力です。次に、選択イベントを処理しなければならず、顧客が選択されている場合にのみ、その顧客を表示ソースのバインディング・ソースで見つけ、選択されていない場合は、表示フィールドのデータソースをnullに設定します。これはひどく不器用だと感じます。私が欲しいものを達成する他の方法はありますか?
なぜバインドソースに「please-select-a-customer」アイテムを追加しないのですか? – Bijan
有効なCustomerIDがNewRowに割り当てられるように、現在の編集内容を保存することをユーザーに強制します。 –