データの仮想化とは、データを一度にすべてロードするのではなく、リモート ソースから段階的にロードするプロセスを指します。 つまり、仮想モードでは、ユーザーがグリッドをスクロールすると、オンデマンドでデータが一定のサイズ単位でロードされます。この機能は、膨大な量のデータを処理する際に非常に役立ち、短時間で効率的にデータをロードできます。
データ仮想化には、ページネーションとカーソルという 2 つの広く採用されているアプローチがあります。 ページネーション アプローチでは、データのどの部分が要求されるかを指定するために、制限とオフセットのパラメーターがリモート ソースに送信されます。このアプローチでは、利用可能なアイテムの合計量が返されるため、クライアントは残りのアイテムを取得する方法を知ることができます。 一方、カーソル アプローチでは、ページを順番に取得するために、最初は null であるトークンが最初に送信されます。この場合、受信したページには次のページへのトークンが含まれています。
FlexGrid はデータの仮想化をサポートし、大規模なデータ セットをリアルタイムでロードしながら優れたパフォーマンスを発揮します。 FlexGrid コントロールに仮想モードを実装するには、データグリッドまたはリスト コントロールのデータ仮想化を提供する C1DataCollection ライブラリを使用します。
C1DataCollection 名前空間は、C1VirtualDataCollection と C1CursorDataCollection を提供して、ページネーションとカーソル アプローチをそれぞれ実装します。 どちらのクラスにも、コレクションに入力するアイテムを返すために実装する必要がある抽象 GetPageAsync() メソッドがあります。基本クラスは、データをキャッシュするだけでなく、一連のパラメーターに従ってページの要求をディスパッチし、同時に要求されるページが多すぎるのを防ぎます。 このトピックでは、C1VirtualDataCollection クラスを使用したデータ仮想化とその実装について説明します。
まず、C1VirtualDataCollection インターフェイスを実装して、データに従って GetPageAsync メソッドをオーバーライドします。 C1VirtualDataCollection の GetPageAsync メソッドは、ページ内の項目と次のページへのトークンを返します。このメソッドは、pageIndex、startingIndex、count、sortDescriptions、filterExpression、および cancel Token をパラメーターとして使用します。 パラメータ pageIndex は要求ページのインデックスを示し、 startingIndex は返されるアイテムが挿入されるインデックスを示し、 count は返されるアイテムの数を示します。 GetPageAsync メソッドは、アイテムの総数 (TotalCount) と、インデックス (startingIndex) から始まる要求されたアイテム数 (count) のリストを返します。
FlexGrid にデータ仮想化を適用し、それに仮想データ コレクションを設定するには、VirtualModeCollectionView のインスタンスを渡す C1DataCollectionBindingList のオブジェクトを作成し、それをグリッドの DataSource プロパティに割り当てます。