Data for Silverlight
ページ上のコントロールへのデータ連結

データを取得したら、そのデータをページ上のコントロールに連結する必要があります。次は、このタスクを処理する 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 を呼び出すと、すべての列が公開されます。

関連トピック

 

 


Copyright © GrapeCity inc. All rights reserved.