次の方法で共有


ASP.NET Dynamic Data のフィールド テンプレートの概要

更新 : 2007 年 11 月

ASP.NET Dynamic Data のフィールド テンプレートは、データ モデルのデータ型とデータ コントロールとを対応付ける ASP.NET ユーザー コントロールです。フィールド テンプレートは、FieldTemplateUserControl クラス (データ モデルにおいて、データ フィールド、データ列、およびメタデータへのアクセスを可能にするクラス) から派生されます。Dynamic Data プロジェクトには、既定のフィールド テンプレートがいくつか用意されていますが、それらに変更を加えたり、カスタム フィールド テンプレートを独自に作成することも可能です。このトピックは、次の内容で構成されます。

  • 機能

  • 背景

  • 既定のフィールド テンプレート

  • フィールド テンプレートの使用

  • フィールド テンプレートのレンダリング方法

機能

  • Dynamic Data では、フィールド テンプレートを使用して、データ モデル内の個々のデータ フィールドがレンダリングされます。

  • Dynamic Data では、次の操作をユーザーが行うことができます。

    • 既定のフィールド テンプレートを変更する。

    • カスタム フィールド テンプレートを作成する。

背景

Dynamic Data は、データ ドリブン Web アプリケーションの作成をサポートします。ASP.NET データ ソース コントロールや既存のデータ コントロール (GridView や ListView コントロールなど) によるデータ アクセスと比べて、Dynamic Data では、必要なコードの量が圧倒的に少なくて済みます。たとえば、Northwind データベースの Products テーブルには、Categories テーブルや Suppliers テーブルとの外部キー リレーションシップが存在します。このようなリレーションシップを GridView コントロールや ListView コントロールで表示するには、データベース スキーマに関する理解が必要です。また、コントロールを手動で構成し、場合によってはコードを記述する必要もあります。

これに対して Dynamic Data では、データベース スキーマを読み取ることにより、データ型や外部キーに関する情報を取得します。Dynamic Data には、データベース スキーマを認識する ASP.NET データ コントロールが備わっており、これらのコントロールは、ユーザーがより簡単にデータにアクセスして操作できるように配慮されています。GridView コントロールや DetailsView コントロールの既定のレンダリングを置き換えるには、各ページのレンダリングに必要なコードを手動で記述する必要があります。GridView コントロールや DetailsView コントロールの既定のレンダリングを、よりシンプルな方法で全面的に変更することを可能にするのがフィールド テンプレートです。

フィールド テンプレートは、Dynamic Data のコントロールで個々のデータ フィールドを表示するために使用されます。データの表示と編集のための既定のレンダリングは、既定のフィールド テンプレートを使用して作成されます。既定のフィールド テンプレートをカスタマイズすることも、新しいフィールド テンプレートを作成することもできます。

たとえば、Northwind データベースの Products テーブルでフィールド テンプレートを使用して、カテゴリ ID の代わりにカテゴリ名を表示したり、ドロップダウン リスト ボックスを編集モードで表示したりできます。また、関連するデータが表示されるより詳細なページなど、他のページへのリンクを提供することもできます。

データベース スキーマを認識する高度なデータ コントロールの作成方法については、「ASP.NET データ バインド コントロールへの動的な動作の追加」を参照してください。

フィールド テンプレートを使用する Dynamic Data コントロール

次の Dynamic Data コントロールでは、フィールド テンプレートが使用され、データ型に基づいて自動的にデータがレンダリングされます。

既定のフィールド テンプレート

既定のフィールド テンプレートとは、Dynamic Data Web アプリケーションに組み込まれているフィールド テンプレートのことです。既定のフィールド テンプレートの例を次に示します。

ForeignKey.ascx: 多対一リレーションシップを持つフィールドを表示します。

ForeignKey_Edit.ascx: 多対一リレーションシップを持つフィールドの編集に使用されます。

DateTime.ascx: DateTime データ型をテキストとして表示します。

Dynamic Data には、ブール、Decimal、整数、テキストなどのデータ型をレンダリングするための既定のフィールド テンプレートが用意されています。

既定のフィールド テンプレートの詳細については、「ASP.NET Dynamic Data の既定のフィールド テンプレート」を参照してください。

フィールド テンプレートの使用

フィールド テンプレートを実装するには、データベースから値を取得して表示したり、IBindableControl.ExtractValues メソッドを使用して値を取り出したり、DataControl コントロールへのアクセスを提供したりする処理を行います。

既定のフィールド テンプレートをカスタマイズすることも、新しいフィールド テンプレートを作成することもできます。既定のフィールド テンプレートをカスタマイズした場合は、カスタマイズされた既定のフィールド テンプレートが Dynamic Data で使用されます。

既定のフィールド テンプレートによるデータの表示方法のカスタマイズ

既定のフィールド テンプレートは、データ モデル内のデータ型に対応付けられる ASP.NET ユーザー コントロールです。これらのコントロールは、FieldTemplateUserControl クラス (データ フィールド、データベース列、およびメタデータへのアクセスを可能にするクラス) から派生されます。

既定のフィールド テンプレートに変更を加えることで、データ コントロールによるデータのレンダリング方法を変えることができます。たとえば、既定のフィールド テンプレートを使用するデータ コントロールについて、そこに表示されるテキストの背景色や前景色を変更できます。詳細については、「方法 : ASP.NET Dynamic Data の既定のフィールド テンプレートをカスタマイズする」を参照してください。

カスタム フィールド テンプレートの作成

カスタムのフィールド テンプレートを作成することもできます。そのためには、FieldTemplateUserControl クラスから派生する ASP.NET ユーザー コントロールを作成します。作成した新しいコントロールをデータ フィールドに対応付ける UIHint プロパティを追加すると、既定のフィールド テンプレートが置き換えられます。

カスタム フィールド テンプレートの作成方法については、「方法 : データ モデルでデータ フィールドの表示をカスタマイズする」を参照してください。UIHint プロパティの使用方法については、「方法 : Dynamic Data コントロールでデータ フィールドの外観と動作をカスタマイズする」を参照してください。

フィールド テンプレートのレンダリング方法

Dynamic Data では、表示、編集、挿入の各モードで既定およびカスタムのフィールド テンプレートがレンダリングされます。レンダリングするフィールド テンプレートは、ルックアップ規則を使用して決定されます。Dynamic Data が使用するルックアップ規則は、コントロールが表示、編集、挿入のどのモードにあるかによって異なります。たとえば、列データがブール値で、データ コントロールが表示モードになっている場合は、ブール型を表示する既定のフィールド テンプレートである Boolean.ascx がレンダリングされます。一方、データ コントロールが編集モードになっている場合は、ブール型の編集が可能なフィールド テンプレートである Boolean_Edit.ascx がレンダリングされます。データ コントロールが挿入モードになっている場合は、ブール型の挿入が可能なフィールド テンプレートである Boolean_Insert.ascx がレンダリングされます。

データ モデル内のデータ フィールドに UIHint 属性が関連付けられている場合 (つまり、カスタム フィールド テンプレートが指定されている場合)、Dynamic Data は、UIHint の名前に基づいてコントロールを検索します。たとえば、UIHint 属性に MyTemplate が指定されている場合、MyTemplate.ascx というフィールド テンプレートが検索されます。または、コントロールが編集モードの場合は MyTemplate_Edit.ascx、挿入モードの場合は MyTemplate_Insert.ascx が検索されます。該当するコントロールが見つからない場合は、既定のフィールド テンプレートが使用されます。

ルックアップ規則

Dynamic Data によるルックアップは、フィールド テンプレートのモードを判別することから始まります。モードごとに、一連のルックアップ規則が適用されます。

表示モードのルックアップ

表示モードでのフィールド テンプレートのレンダリングには、次のルックアップ規則が使用されます。

  1. UIHint (つまり、カスタム フィールド テンプレート) のメタデータが存在する場合、Dynamic Data は、ユーザー コントロールの名前と DataTypeAttribute (UIHint プロパティおよび DataTypeAttribute プロパティで定義) に基づいてコントロールを検索します。既定では、Dynamic Data は一部のデータ型を表示しません。たとえば、binary、timestamp、image などの Byte[] データ型は、既定ではレンダリングされません。Dynamic Data が既定で表示するデータ型の詳細については、「ASP.NET Dynamic Data の既定のフィールド テンプレート」を参照してください。カスタム データ型の表示方法については、「DataTypeAttribute」を参照してください。

  2. Dynamic Data は、データベースの列からデータ型を判断し、そのデータ型に基づいてコントロールを検索します。データ型の名前は、次の順序で決定されます。

    1. 完全なデータ型名 (System.Int32 など) を検索します。

    2. 完全型名が見つからない場合は、単純データ型名 (int32 など) を検索します。

    3. 単純データ型名が見つからない場合は、データ テーブルに定義されている特殊なケースを検索します。たとえば、Int32 のような単純データ型が見つからない場合は、データ テーブルに定義されている特殊なケースである Integer が検索されます。単純データ型の String が見つからない場合は、String の特殊なケースである Text が検索されます。

    4. 特殊なケースは見つからなくても、フォールバック データ型が存在する場合は、フォールバック データ型を検索します。Dynamic Data は、そのフォールバック データ型を使用して、ここまでのルックアップ処理を最初から実行します。

    5. フォールバック データ型が存在しない場合、データは一切表示されません。

  3. 外部キー フィールドの場合は、ForeignKey.ascx (多対一リレーションシップ用の既定のフィールド テンプレート) または Children.ascx(一対多リレーションシップ用の既定のフィールド) がレンダリングされます。

フィールド テンプレート コントロールが見つからない場合は、フィールド テンプレートが見つからず、データを表示することができないという内容のエラー メッセージが表示されます。

編集モードのルックアップ

編集モードのルックアップ規則は、表示モードの規則とほぼ同じです。ただし、次の例外があります。フィールド テンプレートが編集モードの場合、Dynamic Data は "_Edit" フィールド テンプレート (MyTemplate_Edit など) を検索して規則を適用します。それ以外の場合は、既定の表示モード (読み取り専用) になります。

挿入モードのルックアップ

編集モードのルックアップ規則は、表示モードの規則とほぼ同じです。ただし、次の例外があります。フィールド テンプレートが挿入モードの場合、Dynamic Data は "_Insert" フィールド テンプレート (MyTemplate_Insert など) を検索して規則を適用します。それ以外の場合は、_Edit フィールド テンプレートを検索します。

Cc488523.alert_note(ja-jp,VS.90).gifメモ :

"_Insert.ascx" ユーザー コントロールは、既定では提供されていません。

フォールバック データ型

データ型

Decimal

Float、Double

Int

Int16、byte、Long

String

Char、Int、Decimal、GUID、DateTime、DateTimeOffset、TimeSpan

クラス リファレンス

クラス

説明

FieldTemplateUserControl

すべての FieldTemplateUser コントロールの基本クラスです。

その他のトピック

ASP.NET データ バインド コントロールへの動的な動作の追加

ASP.NET Dynamic Data スキャフォールディングとページ テンプレートの概要