クライアントに大量のデータを一度に取り込むことなく表示するには、従来、ページングが使用されてきました。インタフェースが複雑になり、ユーザーにとってもあまり便利ではないため、ページングは理想的なソリューションと言えません。ただし、ページングの方が好ましいアプリケーションもあります。このような場合のために、C1DataSource はページングをサポートしています。しかも、これまでようにデータ変更が制限されることはありません。ユーザーは、1つのセッションで複数のページを変更できます。次のページに進む前に、前のページの変更をデータベースに送信する必要もありません。これは、Microsoft RIA サービスの DomainDataSource で実装されているようなページングよりはるかに優れています。
メモ:DataSource for Entity Framework には、ページングの欠点を補うソリューションが用意されています。これについては、このヘルプの「
仮想モード」で説明します。
ページングを実装するには、次の手順に従います。
- 「マスター/詳細連結」の説明で作成したプロジェクトを使用します。前と同様に、同じ ContextType を使用して、C1DataSource コンポーネントを含む新しいフォームを追加します。このフォームをスタートアップフォームにすることで、プロジェクトの実行にかかる時間を短縮することができます。
- ViewSourceCollection エディタで ViewSource を作成します。EntitySetName には「Orders」と入力します。
- ここでは、ページングを有効にするために、PageSize プロパティを 10 に設定します。このプロパティには、妥当な値を任意に選択することができます。この値は、ページに表示されるデータ行の数を決定します。
- DataGrid をフォームに追加し、その C1DataSource プロパティを C1DataSource に、DataMember プロパティを Orders に設定します。
- ページ間を簡単に移動できるように、次の図のように btnPrevPage と btnNextPage の2つのボタン、およびラベル labelPage を追加します。
- 次のコードを追加します。PropertyChanged イベントの RefreshPageInfo ハンドラは、現在のページ番号とページ数を表示するために使用され、ボタンの Click イベントのハンドラは、次/前のページへの移動に使用されます。
- アプリケーションを保存、ビルド、および実行します。Orders 間をページ移動します。ページ間を移動しながら、グリッドでいくつかのデータを変更してみます。1つのページでデータを変更してから別のページに移動し、そのページでもデータを変更します。C1DataSource では、変更したページをデータベースに保存しなくても、次のページに移動できることに注目してください。これは、Microsoft RIA サービスの DomainDataSource で実装されているようなページングより優れた重要な機能です。Microsoft RIA サービスの DomainDataSource で実装されているページングは Silverlight 用ですが、C1DataSource では、3つすべてのプラットフォーム(WinForms、WPF、Silverlight)で、他の機能と同様にこのページングの実装がサポートされています。
また、いくつかの注文を削除してみます。この操作も制限なく実行することができます。さらに、現在のページが自動的に更新されて、ページ内の行数が維持されます。新しい行を追加することもできます。新しい行は、データセットの最後に付加されます。
以前の同様に次のコードを使用して[変更の保存]ボタンを追加すると、そのボタンを使用して、複数のページに加えた変更を一度に保存することができます。
これらの機能はすべて、データ変更に制限のないページングを実装するために求められるものです。ただし、この機能を実装することは簡単ではありません。たとえば、あるページで変更されたデータが他のページの表示に影響を与えるようなケースをすべて想定する必要があります。このため、ページングでは、データの変更が許可されていても、それに厳しい制限が課されることが普通です。たとえば、MS DomainDataSource では、他のページに移動する前に、すべての変更を保存する必要があります。C1DataSource がサポートしているページングでは、データを無制限に変更することができます。
他の多くの機能と同様に、変更に制限のないページングは、クライアント側のキャッシュによって実現されています(「クライアントデータキャッシュの能力」を参照)。つまり、C1DataSource に実装されているページングは、パフォーマンスとメモリ消費の両面で最適化されています。この最適化は、キャッシュによって実現されています。最近開いたページがメモリに保存されるので、通常は、同じページを再度開くと瞬時に表示されます。また、メモリリソースが管理され(古いページは必要に応じて解放されます)、メモリリークが防止されます。