0

このテーブルに StatusId という列を持つデータテーブル (ジョブ) があります。別のデータテーブル (jobStatus) があります。job テーブルには 1 つのジョブ レコードがあり、jobstatus テーブルにはすべてのジョブ ステータスがあります。

私のwinformsフォームにはジョブレコードが表示されており、ジョブステータスはjobstatusテーブルの内容を表示するコンボボックスです。List 部分 (DisplayMember) は jobstatus テーブルにバインドされ、data 部分は jobs テーブルにバインドされます。(ValueMember) したがって、すべてがうまく機能し、ジョブが選択されて表示されると、コンボボックスがそれぞれのジョブのステータスを選択します...すべて正常です。

これで、ジョブ ステータス レコードを追加できる別のフォーム (JobStatus) ができました。そのため、ジョブ レコードを入力/変更しているときに、別のジョブ ステータスが必要であることに気付き、ジョブ ステータス フォームにジャンプして新しいステータスを入力します。次に、ジョブ フォームに戻り、コンボ ボックスで新しいジョブ ステータスを選択できるようにします。

私の質問は、別のフォームにコンボボックスを設定するために使用されるルックアップ スタイル リストに新しいレコードが追加または編集されたこのシナリオのベスト プラクティスは何かということです。フォームのちらつきを除いて機能するフォームのアクティブ化イベントにコードを入れてみましたが、見栄えが悪いです。

何か案は???

私はあなたが言ったことを事実上実行していたので、コードをもう少し詳しく見ることができました. 問題は、コード行を処理していた順序でした。

古いコード

  cboCustomer.DataSource = Business.Contact.GetContact( Enums.ContactType.Customer ).Tables[0];
            sorted = ( ( DataTable ) cboCustomer.DataSource ).DefaultView;
            sorted.Sort = "Name ASC";

ここに新しいコード

  DataView dv = Business.Contact.GetContact( Enums.ContactType.Customer ).Tables[0].DefaultView;
            dv.Sort = "Name ASC";
            DataTable dt = dv.ToTable();
            cboCustomer.DataSource = dt;

魅力のように機能します。あなたの助けに乾杯

4

1 に答える 1

1

Activated問題なくイベントを利用できるはずです。それは、ドキュメントがそれが良いと言っていることです:

このイベントは、フォームがアクティブ化されていないときにフォームのデータに加えられた変更に基づいてフォームの内容を更新するなどのタスクに使用できます。

もちろん、親フォームでこのイベントをサブスクライブすると、いくつかの誤検出が発生します。ユーザーがコンボ ボックス コントロールを使用せずにフォームに切り替えた場合を考えてみましょう。大したことではありませんが、その場合、理由もなくコンボ ボックスを更新したことになります。これは、コンボ ボックス コントロールのEnterイベント処理に切り替えることで簡単に修正できます。これは、その特定のコントロールがフォーカスを受け取ったときにのみ発生します。このイベントの唯一の制限はEnter、フォーカスされたコントロールをこのイベント ハンドラー内から変更できないことです (ただし、いずれにせよそうしたくはありません)。

そこで、ちらつきの問題を修正する必要があります。コンボ ボックスの更新を開始する前に、イベント ハンドラー メソッドの開始時に (使用するメソッドに関係なく)、そのBeginUpdateメソッドを呼び出します。これにより、(描画を抑制することによって) 更新中にコントロールがちらつくのを防ぎます。最後に、 への呼び出しで終了する必要がEndUpdateあります。これにより、ペイントが再度有効になり、変更を反映するために 1 回の再ペイントが実行されます。

私はこれを自分でテストしましたが、ちらつきは見られません。変更を反映するためにコントロールが再描画される間、最大で 1 回ちらつきます。明らかに、それ以上のことはできません。

于 2013-03-17T08:09:37.347 に答える