バージョン

WinGrid セル内に WinChart を表示する方法

WinGrid™ のセル内に WinChart™ を表示することは、本来の機能で達成できませんが、一部の基本と Presentation Layer Framework™ を通して何が公開されるのかを理解することによって、この機能は的確に達成できます。

他の多くの Ultimate UI for Windows Forms コントロールと共に WinGrid は Presentation Layer Framework (PLF) と命名された物に基づいています。PLF コントロールは、コントロールの個々のセクションを表す個別のグラフィカル ユニットである、多くの UIElements で構成されます。IUIElementDrawFilter 実装によって、 PLF コントロールの内部に入り込むことができ、コントロールの描画プロセス中に使用できる多数の情報を活用できます。

WinGrid セル内に WinChart を本当は組み込むことができないので、これを行うためには創造的に考える必要があります。一連のトピックが説明するアプローチは、特定の WinGrid 列の固有のセルで WinChart を配置およびサイズ設定する戦略を使用します。

WinGrid セルで WinChart を配置およびサイズ設定することは困難なことです。このアプリケーションのデザイン中に生じる可能性のある質問は以下のとおりです:

  • グラフに正しく配置できるようにセル座標を取得するにはどうすればいいか?

  • グラフを正しくサイズ設定できるようにセルの高さと幅を決定するにはどうすればいいか?

  • グリッド データをスクロールするとどうなるか?

  • 他のエレメントがセルにオーバーラップしたりクリップするとどうなるか?

Draw Filter はこれだけでなくより多くの情報を提供するので、この機能の実現は現実味があります。この例では、Draw Filter は、グラフ列のセルがリサイズ、クリップ、およびスクロールされる時に観察するために使用されます。これらのイベント中、常にセルの前にくるように、グラフを配置およびサイズ設定するだけです。

パフォーマンス

別の質問に次のようなものがあります。グリッドに 100 万行ある場合、100 万の個別の Chart インスタンスがパフォーマンス低下を起こしますか?答えは Yes です。この特定の理由のため、特定の列のセルのすべてでそれ自体を描画する目的で、このグリッドに存在するグラフはひとつだけです。これを達成するために、ひとつの実際のグラフをアクティブ セルに配置し、画像ですべての他のセルを置き換える戦略が採用されます。言い換えると、最後のアクティブ WinGrid セルは、本当のインタラクティブな WinChart コントロールを実際にはその上に配置することになります。すべての他のセルには、グラフのスナップショットおよびセルが非活動になる前の状態を表す画像が含まれます。画像と本当のグラフを交換する場合、本当のグラフがロードされたときに、そのデータおよび保持したプロパティ設定をリストアできるように、グラフの状態を保持する必要があります。

データ

データは Draw Filter を通して公開するイベントでグラフに提供されます。各グリッド セルで初めてグラフがロードされる時は常にイベントが発生するので、カスタムイベント引数を公開し、開発者はそのイベントを処理して、グラフが添付される行を決定し、その情報を使用して関連データをフェッチしたりグラフを移植できます。

このシリーズの次のトピックは、このアプリケーションで使用される Draw Filter のデザインと実装を理解する支援となります。 WinGrid Draw フィルタ実装内の WinChart