| チュートリアル > クライアント側の実装 > ページ上のコントロールへのデータ連結 |
データを取得したら、そのデータをページ上のコントロールに連結する必要があります。次は、このタスクを処理する BindData メソッドの実装です。
|
コードのコピー
|
|
|---|---|
void BindData() { // 必要なテーブルを取得します DataTable dtCategories = _ds.Tables["Categories"]; DataTable dtProducts = _ds.Tables["Products"]; // カテゴリグリッドにデータを挿入します _gridCategories.ItemsSource = new DataView(dtCategories, "カテゴリID", "カテゴリ名", "説明"); // 製品グリッドにデータを挿入します _gridProducts.ItemsSource = dtProducts.DefaultView; } |
|
![]() |
メモ: Windows フォームまたは ASP.NET アプリケーションを記述したことがある場合、これは見慣れたコードです。これは C1.Silverlight.Data の利点の1つです。Silverlight アプリケーションでは ADO.NET の知識を活用することができます。DataSet オブジェクトモデルを使用して、データ連結に使用できるテーブルを調べたり変更することができます。スキーマやデータのほか、データリレーション、キーなども変更できます。 |
ただし、DataView オブジェクトを作成し、どの列をビューに入れるかを指定する文は、あまり一般的ではありません。これは、C1.Silverlight.Data の実装によって提供される拡張機能です。オリジナルの ADO.NET DataView クラスにはありません。
ここでプロジェクトを実行すると、サーバーからデータが取得されることを確認できます。

サンプルを続行する前に、いくつかの点を確認します。
データをコントロールに連結するコードはおなじみですが、実際に裏で実行されることは、従来の Windows フォームや ASP.NET のシナリオとはかなり異なります。WPF や Silverlight のデータ連結は、すべてリフレクションを使って実行されます。ただし、DataView コレクションによって公開される DataRowView オブジェクトには、基底の DataTable 内の列(カテゴリID、カテゴリ名、説明 など)に対応するプロパティはありません。
![]() |
メモ:DataView クラスは、DataRowView から派生される匿名タイプを動的に作成し、テーブル列に対応する追加プロパティを公開するため、連結が可能になります。次に、コントロールはリフレクションを使用して、これらのプロパティを検索し、連結します。 |
DataRow クラスも GetRowView メソッドを介してこのメカニズムを活用します。このメソッドは、DataRow の選択されたプロパティを公開し、データ連結に使用できるラッパーオブジェクトを作成します。このメソッドは、LINQ クエリー内で使用できます。
たとえば、次のコードは、「C」で始まるすべてのカテゴリを選択し、それらの名前と説明を公開する LINQ クエリーを作成します。
|
コードのコピー
|
|
|---|---|
_gridCategories.ItemsSource =
from dr
in dtCategories.Rows
where ((string)dr["カテゴリ名"]).StartsWith("C")
select dr.GetRowView("カテゴリ名", "説明");
|
|
パラメータなしで GetRowView を呼び出すと、すべての列が公開されます。