最初に、Visual Studio で新しい Windows フォームプロジェクトを作成します。
プロパティウィンドウで、ContextType プロパティを、使用するオブジェクトコンテキストのタイプに設定します。この例では、"AppName.NORTHWINDEntities" のようなオプションが1つだけドロップダウンリストに表示されます。
この時点で、C1DataSource により、アプリケーションレベルのオブジェクト(EntityDataCache)が作成されています。このオブジェクトは、Northwind データベースを表し、アプリケーションスコープを持ちます。他のフォームに追加される C1DataSource オブジェクトも、この同じオブジェクトを共有します。同じアプリケーションに属する C1DataSource オブジェクトは、すべて同じ ObjectContext を共有します。
この統合オブジェクトコンテキストは、C1DataSource の大きな特長の1つです。これがない場合は、アプリケーション全体で複数のオブジェクトコンテキストを作成し、それぞれを他のオブジェクトコンテキストや基底のデータベースと個別に同期させる必要があります。これは簡単な仕事ではなく、エラーがあればデータの整合性が損なわれます。統合オブジェクトコンテキストは、この仕事を透過的に実行します。データを効率よくキャッシュし、安全かつ一貫性がある方法ですべてのビューにデータを提供します。
これで、C1DataSource に ObjectContext が作成されたので、次にその ViewSources コレクションを通してアプリケーションに公開するエンティティセットを指定します。ADO.NET に精通している場合は、C1DataSource が DataSet に、ViewSources コレクションが DataView オブジェクトに相当すると考えることができます。
C1DataSource のプロパティから ViewSourcesCollection プロパティを見つけ、そのエディタダイアログを開きます。[追加]をクリックし、[EntitySetName]ドロップダウンリストから Products を選択します。
この簡単な例で実際に必要なエンティティセットは Products だけです。ただし、引き続き同じ方法で、この C1DataSource 内に ViewSource を作成してもかまいません。たとえば、Categories エンティティセットに基づいて ViewSource を作成すると、Categories と Products 間のマスター/詳細関係を表示するためのフォームを作成することができます。反対に、必要になるすべての ViewSource を1つの C1DataSource で定義する必要はありません。必要な ViewSource ごとに別の C1DataSource を作成することができます。必要なことは、使用する C1DataSource コンポーネントで同じ ContextType を利用することだけです。
実際のところ、クライアントに返したいデータは、常に、データベースに含まれるデータのほんの一部です。そうすることで、クライアントやネットワークに過大な負荷がかかることを回避でき、エンドユーザーが実行しているタスクに関係するデータだけを提示することができます。従来は、コード(通常は SQL クエリー)を作成してデータベースに対して実行することで、この目的を達成していました。C1DataSource を使用すると、サーバー側のフィルタをプロパティ設定として指定することで、コードを記述することなく、デザインサーフェスを利用してこの目的を達成することができます。
ViewSourceCollection エディタで、FilterDescriptor コレクションエディタを開きます。フィルタディスクリプタを追加し、サーバー側でフィルタ処理するプロパティの名前とその値を入力します。複数のプロパティをフィルタ処理する場合は、フィルタディスクリプタを追加します。
同じ方法で、取得したデータをソートする SortDescriptor を追加することができます。
C1DataSource を設定したら、フォームにグリッドコントロールを追加します。DataGridView、C1FlexGrid など、使い慣れた任意のグリッドを使用することができます。グリッドの C1DataSource プロパティを C1DataSource の名前に設定し、その DataMember プロパティを Products に設定します。C1DataSource に名前を付けていない場合は、c1DataSource1 を指定します。実際の DataMember プロパティのドロップダウンリストには、C1DataSource に対して定義したすべての ViewSource(またはエンティティセット)が表示されます。
この時点で、グリッドに、Product タイプのすべてのフィールドに対応する列が自動的に生成されます。また、ほとんどのグリッドでは、組み込みのデザイナを使用して、これらの列とレイアウトをカスタマイズすることができます。グリッドのレイアウトが完成したら、アプリケーションを保存、ビルド、および実行します。データが自動的にロードされ、目的のとおり、項目をソート、追加、および削除できることを確認してください。2つの項目(C1DatSource とデータグリッド)をフォームに追加し、いくつかのプロパティを設定するだけで、作業が完了しました。1行もコードを記述する必要はありませんでした。
引き続き、このフォームに他のコントロールを追加して、それらを Products コレクションの特定の項目に連結することができます。その具体例として、フォームに1つの TextBox コントロールを追加します。次に示すように、プロパティウィンドウで DataBindings セクションを展開し、その Text プロパティを ProductName に連結します。
アプリケーションを再度保存、ビルド、および実行します。今回は、グリッドで現在選択されている製品の名前が、フォームに追加した TextBox に表示されます。一方のコントロールで製品名を編集すると、その変更がもう一方のコントロールにすぐに反映されます。