私はマルチペイントフォームを持っています、左側のペインはツリーで、右側のペインはPanelです。ツリーの選択により、特定のUserControlsがパネルにロードされます。この場合、親フォームは常にロードされているので、親フォームのShowイベントにフックできません。表示された後、UserControlでメソッドを呼び出す方法?
私のUCの大半は、UCが作成されたときにデータを取り込む必要があるバインドされていないDataGridViewを持っています。 SQL Serverデータベースから、時には50,000行が正面に追加されることがあります。
これまで、私はUCコンストラクタでグリッドに値を設定しましたが、50,000行で作業を開始して以来、変更されています。私は、コンストラクタから50,000行のグリッドにデータを入力すると、何らかの狂気の理由で少なくとも15分かかります。しかし、ボタンをクリックするか、またはLoadイベントからグリッドを移入するまで待つと、15秒かかります。これは謎です。だから私はグリッドのローディングを他の場所に移そうとしています。
ただし、Loadイベントからグリッドにデータを入力しようとすると、視覚的に矛盾があります。どうしたら、私のUCの小さなバージョンが表示され、DGV行をロードするのに15秒かかり、その後UCがパネルを埋めるように展開されます(UC DockプロパティはFillに設定されています)。だから私はこのオプションも好きではない。
表示されたイベントは、UCのために存在する場合、グリッドをロードするのに最適な場所になります。誰かがこれを行う別の方法を知っていますか?
それはコンストラクタでロードするために15分かかりますが、15秒の別の場所で、なぜ、より良い質問ですが。 – Justin
おそらく、彼の人口ロジックがフォーム構築中に何度も変化するものに基づいて実行しているか、またはフォームロード時にいくつかのDGVをキャッシュに読み込んでいる可能性があります。 – KeithS
これがなぜ起こっているのか、考えてみてください。私はむしろ以前のアプローチにとどまっています。コードはデータベース呼び出し(データは変更されていません)と1つのDGVの充填で構成されています。コンストラクタからの呼び出しとボタンからの呼び出しには違いがあります。コンストラクタはBackgroundWorkerスレッド内から呼び出されています。それがその原因かもしれませんか? –