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 ポスト
  • このエントリーをはてなブックマークに追加

Dynamic Dataフィールド(ユーザーコントロール)の作成と適用

 Dynamic Dataの表示に使われるDynamic Dataフィールドはユーザーコントロールとして作成することもできます。今回は、AJAX Control ToolkitのToggleButtonExtenderコントロールを適用したユーザーコントロールを作成します。

 下準備として、AjaxControlToolkit.dllを参照追加し、ToggleButtonExtenderコントロールで使用するチェック/アンチェックの画像が2つ必要になります(画像はサンプルに含まれているのでよろしければ利用してください)。

Dynamic Dataフィールド(ユーザーコントロール)の作成

 配置場所となるFieldTemplatesフォルダ上で[新しい項目の追加]を選択して、Dynamic Dataフィールド-「BooleanImg」と名前を付けて追加します。追加されるユーザーコントロールは1つだけでなく、表示用と編集用が追加されます(BooleanImg.ascx/BoolieanImg_Edit.ascx)。編集用は'_Edit'がベース名の後ろに自動的に付加されるので、ユーザーコントロール自身の命名規則は特にありません。

 基本的に内容は同一ですので、ここではBooleanImg_Edit.ascxの設定を示します。

 重要なのはチェックボックスのデータバインディングで、System.Web.DynamicData名前空間のIBindableControl.ExtractValuesメソッドを利用します。ExtractValuesメソッドは、フィールドテンプレートコントロール上で双方向データバインディングを実装します。パラメータは1組の名前とデータ抽出元のコントロールの値で、戻り値は名前と値のペアのIOrderedDirectoryとなります。

BooleanImg_Edit.ascx
<%@ Control Language="vb" AutoEventWireup="false" Inherits="System.Web.DynamicData.FieldTemplateUserControl" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolkit" %>

<%--Script部分を外せばBooleanImg.ascxのコードとなる--%>
<script runat="server">
    ' 双方向のデータバインディング
    Protected Overrides Sub ExtractValues(ByVal dictionary As IOrderedDictionary)
        dictionary(Column.Name) = CheckBox1.Checked
    End Sub
</script>

<asp:CheckBox runat="server" ID="CheckBox1" Checked="<%# FieldValue %>"                       />

<ajaxToolkit:ToggleButtonExtender ID="ToggleButtonExtender1" runat="server"
    TargetControlID="CheckBox1" ImageWidth="20" ImageHeight="20"
    UncheckedImageUrl="../Content/Images/sadface.gif" CheckedImageUrl="../Content/Images/smileface.gif"
    CheckedImageAlternateText="Check" UncheckedImageAlternateText="UnCheck"                       />

 以上で、ユーザーコントロールが作成できました。

Dynamic Dataフィールド(ユーザーコントロール)の適用

 続いてユーザーコントロールをメタデータに使用するための属性を設定します。

 UIHint属性は、ユーザーコントロールのベース名のみ指定することでアクションに対応します。

author.vb
Imports System.ComponentModel.DataAnnotations

<MetadataType(GetType(author.authorMetadata))> _
Public Class author

    Partial Public Class authorMetadata

        Private _contract As Object
        'Boolean形を表示するユーザーコントロール(BooleanImgとBooleanImg_Edit)を指定
        <UIHint("BooleanImg")> _
        Public Property contract() As Object
            Get
                Return _contract
            End Get
            Set(ByVal value As Object)
                _contract = value
            End Set
        End Property

    End Class

End Class

 以上で、ユーザーコントロールの指定も完了です。実行すると、図18~19のようになります。

図18 カスタマイズしたAuthorsテーブルのListページ
図18 カスタマイズしたAuthorsテーブルのListページ
図19 カスタマイズしたAuthorsテーブルのEditページ
図19 カスタマイズしたAuthorsテーブルのEditページ

 カスタマイズのコツもこれで理解していただけたかと思います。

まとめ

 Dynamic Dataは、開発者の労力をかけずとも簡単なデータドリブンアプリケーションが作成できることが確認できたかと思います。冒頭にも記述しましたが、現時点でのLINQの仕様から一括処理はできません。しかし、その点を除けばカスタマイズしやすく、非常に柔軟なアプリケーション基盤だと言えます。

 また、Dynamic Dataはプロジェクト生成時に通常と比較にならないほどファイル・ソースが自動生成されます。特にGlobal.asax.vb・ユーザーコントロール部分は既定で作られているソースを修正するのは熟知していないとアプリケーションが想像通り動かなくなることもあります。

 Dynamic Dataにおける開発者の役割は、自動生成されるファイル自身にはあまり手を加えず、パーシャルクラスやカスタマイズページ、ユーザーコントロールを使ってプロジェクトを構築していくことが推奨されていると言っても過言ではありません。

 つまり、データベース(データモデル)あってこそのDynamic Dataですが、実際に利用するのはメタデータ・メタモデルであることが分かります。

 現場での利用を考えた時にまだ積極的な利用はし辛いかもしれませんが、システムの一部としてDynamic Dataを組み込んで構築するには便利な基盤だと思います。

 VS 2008 SP1もRTMされたので、ぜひ一度お試しください。次回は、RESTfulなやり取りを可能にするADO.NET Data Servicesについて解説します。お楽しみに。

参考文献

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

  • 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」など、さまざまなカンファレンスを企画・運営しています。

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

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

メールバックナンバー

アクセスランキング

アクセスランキング