SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ASP.NET 3.5 Extensions + ASP.NET MVCフレームワーク

簡単なデータ編集はお任せ!
ASP.NET Dynamic Dataアプリケーション

ASP.NET 3.5 Extensions + ASP.NET MVCフレームワーク(3)

  • X ポスト
  • このエントリーをはてなブックマークに追加

ASP.NET Dynamic Data Applicationの概要

 Dynamic Dataは、データドリブンのWebアプリケーションを簡単に構築するためのアプリケーション基盤です。実装はASP.NETと、LINQ to SQLもしくはLINQ to Entitiesを利用しています。

 Dynamic Dataは非常に柔軟で、データのリソースから推論し、ページ作成時に最適な要素を選択し、データを表示する要素を動的に変更します。また、既定のテンプレートに基づいてデータのViewをカスタマイズすることもできます。

 データドリブンのWebアプリケーションとして簡単に作成できるDynamic Dataは魅力的ですが、現場での活用シナリオはWeb版の簡易マスタメンテとしての利用が最適なのかもという印象を受けます。一括取り込み、一括削除などは、現時点ではLINQの制約から難しいので、1つずつの項目の編集、追加や全体を鳥瞰するという用途であれば便利なアプリケーションが構築できるかと思います。

 実際にDynamic Dataを実行した画面は図1のようになります。

図1 publishersテーブルのList.aspxページ
図1 publishersテーブルのList.aspxページ

 それでは、Dynamic Dataの中で注目すべきポイントについて解説します。

Dynamic Dataのデータ取得

 Dynamic Dataはオブジェクトモデルのメタデータからのデータフィールドのレンダリングについての基本情報を取得します(MetaModelクラス)。また、オブジェクトモデルを通してメタデータに情報を加えるための機能を提供し、情報はカスタムValidation(検証コントロール)とデータフィールドに使用されます(DataAnnotations名前空間)。

図2 Dynamic Dataのデータ取得概念図
図2 Dynamic Dataのデータ取得概念図

MetaModelクラス

 MetaModelクラスとはDynamic Dataのデータで使われるデータベースと、データコンテキストのことを指します。Dynamic Dataでは、データがLINQ to SQLとADO.NET Entity Frameworkに基づくモデルをサポートします。

 データコンテキストは、データベース接続オブジェクトとして利用され、データモデルはCLRの型と同様にデータベースのデータ構造を表すオブジェクトとして利用されます。

 主に、DynamicDataの中では、実行時のモデルの有無のチェックや、ルーティング登録時に利用されます。

DataAnnotations名前空間

 System.ComponentModel.DataAnnotations名前空間は、データモデルのメタデータを編集する属性クラスを提供する名前空間です。

 メタデータの編集は、テーブルと同名のパーシャルクラスによる指定で表示設定や、検証コントロールの表示などの情報を設定します。

System.ComponentModel.DataAnnotations名前空間の主要な属性クラス
クラス 概要
DataTypeAttribute データフィールドと紐づく型を指定
DisplayColumnAttribute 外部キーのカラムとして照会されたテーブルで表示されるカラムを指定
DisplayFormatAttribute データフィールドを表示するフォーマットを指定
MetadataTypeAttribute データモデルとパーシャルクラスを紐付けるためにメタデータクラスを指定
RangeAttribute データフィールドで許容される数字の範囲を指定
RegularExpressionAttribute データフィールドの値を表示する正規表現の指定
RequiredAttribute データフィールドの値で入力必須のエラーメッセージを指定
ScaffoldColumnAttribute クラスかデータカラムの表示の可否を指定
ScaffoldTableAttribute クラスかテーブルの表示の可否を指定
StringLengthAttribute データフィールドで許容される文字の最大数を指定
UIHintAttribute データフィールドを表示するテンプレートかユーザーコントロールを指定
ValidationAttribute すべての検証属性のベースクラス
ValidationException ValidationAttributeクラス使用時に、データフィールドの検証の間、発生する例外を表示

DynamicDataManagerコントロール

 Dynamic Dataを利用する上で欠かせないのがDynamicDataManagerコントロールです。これは、ASP.NET AJAXのScriptManagerコントロール同様で、Dynamic Dataを利用するページには必須のコントロールです。また、Dynamic Dataを利用するコントロールよりも前に配置する必要があります。以下のソースはプロジェクト作成時に自動生成されます。

 フォームデザイナ側の具体的な設定はAutoLoadForeignKeysプロパティ(Boolean型による設定)のみです。このプロパティは外部キーがLINQ to SQLのデータコンテキストに自動で認識するかどうかを設定します。

List.aspxの一部
<asp:DynamicDataManager ID="DynamicDataManager1" runat="server" AutoLoadForeignKeys="true"                      />

 コードビハインド側では、DynamicDataManagerコントロールを通じて、あらかじめ用意したメタモデルをバインドするためにデータコントロールを登録します。

List.aspx.vbの一部
Protected Sub Page_Init(ByVal sender As Object, ByVal e As EventArgs)
    ' GridView1にメタモデルをバインドする
    DynamicDataManager1.RegisterControl(GridView1, True)
End Sub

Dynamic Data FieldTemplate

 Dynamic Dataのプロジェクトを作成すると、FieldTemplateフォルダが作成されます。このフォルダにはさまざまなDynamic Dataフィールドコントロールが用意されています。Dynamic Dataは、データモデルのリソースから推論し、ページを作成時に、このFieldTemplateフォルダの中から最適な要素を選択し、データを表示する要素を動的に変更します。つまり、既にコードビハインド側のソースも自動生成されています。

 プロジェクト作成時に用意されるDynamic Dataフィールドコントロールは次のとおりです。

Dynamic Dataフィールドコントロール
コントロール 概要
Boolean.ascx Boolean型のデータを表示するのに利用(チェックボックス)
Boolean_Edit.ascx 編集画面の時にBoolean型のデータを表示するのに利用(チェックボックス)
Children.ascx リレーションシップを持つデータをリレーションシップのあるページへとリダイレクトさせるのに利用(ハイパーリンク)
DateTime.ascx 日付型のデータを表示するのに利用(リテラル)
DateTime_Edit.ascx 編集画面の時に日付型のデータを表示するのに利用(テキストボックス)
Decimal_Edit.ascx 編集画面の時にDecimal型のデータを表示するのに利用(テキストボックス)
ForeignKey.ascx 外部キーを持つデータを表示するのに利用(ハイパーリンク)
ForeignKey_Edit.ascx 編集画面の時に外部キーを持つデータを表示するのに利用(ドロップダウンリスト)
Integer_Edit.ascx 編集画面の時にInteger型のデータを表示するのに利用(チェックボックス)
Text.ascx String型、Decimal型、Double型、Int型、byte型、short型、long型のデータを表示するのに利用(リテラル)
Text_Edit.ascx 編集画面の時にString型、Decimal型、Double型、Int型、byte型、short型、long型のデータを表示するのに利用(テキストボックス)
Multiline_Edit.ascx 編集画面の時にテキストブロックを利用しているデータを表示するのに利用(テキストボックスのMultiLineモード)

 メタデータから上記のテキストフィールドをDynamicDataManagerコントロールが判断し、最適な形で表示します。この時、特に気になるのは、ForeignKey_Edit.ascxのデータ取得方法だと思いますが、ForeignKey_Edit.ascxはPopulateListControlメソッドを利用して値をバンディングします。

PopulateListControlメソッド

 PopulateListControlメソッドは外部キーを持つデータを表示する時に、DropDownListコントロールに対して値をバインディングするために利用されるメソッドです。

 PopulateListControlメソッドは、外部キーを通して、現在のテーブルに関連があるデータテーブルのすべてのアイテムをListControlオブジェクトにバインディングします(図3)。

図3 ForeignKey_Edit.ascxの表示例
図3 ForeignKey_Edit.ascxの表示例
ForeignKey_Edit.ascx.vbの一部
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
    ' DropDownList1のアイテムがない時
    If (DropDownList1.Items.Count = 0) Then
        ' メタデータ列のフィールドで必須入力チェックをパスしているかどうか
        If Not Column.IsRequired Then
            ' DropDownList1のアイテムに["Not Set"]を追加
            DropDownList1.Items.Add(New ListItem("[Not Set]", ""))
        End If
        ' 外部キーを通して、データテーブルのすべてのアイテムをDropDownList1にバインディングする
        PopulateListControl(DropDownList1)
    End If
End Sub

次のページ
ASP.NET Dynamic Data Applicationを利用したサンプル作成

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
ASP.NET 3.5 Extensions + ASP.NET MVCフレームワーク連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト ナオキ(ナオキ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3060 2008/10/17 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング