7

Works Order のキャプチャ フォームがCustomerBindingSourceあり、WorksOrderBindingSourceコントロールがあります。ほとんどの編集フィールドは にバインドされておりWorksOrderBindingSource、リストが にバインドされている ComboBox とCustomerBindingSource、のフィールドにSelectedValueバインドされています。これはすべて非常に日常的で標準的なものであり、ここではおかしなことではありません。CustomerIdWorksOrderBindingSource

次に、現在編集中の作業指示書について、現在選択されている顧客のプロパティを表示するために使用するテキスト ボックス フィールドもいくつかあります。これらのフィールドも にバインドしCustomerBindingSourceました。顧客が選択されると、これらのフィールドには期待どおりにその顧客のプロパティが表示されます。

私の問題は、フォームを使用して新しい作業注文を取得する場合です。で新しいWorksOrderオブジェクトをインスタンス化し、CustomerId == nullそれを にバインドしWorksOrderBindingSourceます。にオブジェクトがないCustomerBindingSourceためId == null、予想どおり、ドロップダウン コンボボックスは空白ですが、CustomerBindingSource.Currentプロパティはそのデータソースの最初の Customer オブジェクトを指しています。顧客にリンクされた表示フィールドには、その顧客の値が表示されますが、顧客はまだ選択されていません。

私には明らかなこれに対する唯一の回避策は、不器用に思えます。その中には、顧客が入力した 2 つのバインディング ソースがあります。1 つは選択した顧客用で、顧客表示フィールドにデータを入力するためのもので、もう 1 つは単に顧客のドロップダウンにデータを入力するためのものです。次に、選択イベントを処理する必要があります。顧客が選択された場合にのみ、表示フィールドのバインド ソースでその顧客を見つけ、何も選択されていない場合は、表示フィールドのデータ ソースを null に設定します。これは物凄く手ごわい感じです。私が望むものを達成する他の方法はありますか?

4

2 に答える 2

0

BindingSource を「クリア」するために使用するのは、単純にその DataSource を次のように設定することです。

CustomerBindingSource.DataSource = typeof(Customer);

お役に立てれば。

編集:

明確にするために、説明に従って BindingSource.DataSource プロパティを設定すると、後で元のデータ ソースを再割り当てすることを妨げるものは何もありません。

//Retrieve customers from database
List<Customer> Customers = WhatEverCallToDB();
CustomerBindingSource.DataSource = Customers;

...

//Later we need to blank the Customer fields on the Windows Form
CustomerBindingSource.DataSource = typeof(Customer);

...

//Then again at a later point we can restore the BindingSource:
CustomerBindingSource.DataSource = Customers;

...
于 2012-10-14T04:35:19.567 に答える