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

メタデータの編集とカスタマイズページの利用方法

 サンプル1は、Dynamic Dataを実行するまででした。ファイルやソースが自動生成されていたので、直接設定する場所はわずかでしたが、サンプル2では、Dynamic Dataのメタデータの編集などを行います。こちらはソース解説部分すべて開発者が記述する必要があります。

サンプル作成手順

 サンプル作成手順は次のようになります。同時にそれぞれの項目について理解することもできます。

  • Modelフォルダへのクラスの追加
  • 表示データの編集(メタデータの設定)
  • 表示ページのカスタマイズ

Modelフォルダへのクラスの追加

 最初に、表示ページのカスタマイズで利用するので、Pubs.dbmlクラスにサーバーエクスプローラからauthorテーブルをドラッグしてデザイン画面へとドロップし、保存します。

 続いて、Modelフォルダ上にクラスを追加します。

 [新しい項目の追加]を選択し、クラス-「employee.vb」と名前を付けて追加します(同様にtitles.vb/author.vbも用意します)。

 このクラスはパーシャルクラスとして利用するので、モデルのテーブル名と同一に設定します。

表示データの編集(メタデータの設定)

 サンプル1実行時にemployeeテーブルのList.aspxは図5のように表示されていました。しかし、実際にDynamic Dataを利用するときにすべての値を表示する必要はあるでしょうか?

 通常のASP.NETのGridViewでは列を削除するなどで対応できますが、Dynamic Dataの場合はテンプレートをすべてのテーブルで利用します。つまり、通常設定する場合はメタデータを設定し表示データを編集することになります。メタデータは、データモデル化されているので、列名のプロパティに属性を付加することで、編集が反映されます。

 例えば、"emp_id"と"job_lvl"の列を非表示にしたい場合は、DataAnnotations名前空間の'ScaffoldColumn'属性クラスをFalseに設定することで実現できます。

employee.vbの一部
Imports System.ComponentModel
Imports System.ComponentModel.DataAnnotations

' Pubs.dbmlとemployeeMetadataパーシャルクラスを紐付ける
<MetadataType(GetType(employee.employeeMetadata))> _
Public Class employee

    ' employeeテーブルのメタデータパーシャルクラス
    Partial Public Class employeeMetadata

        ' emp_idのメタデータプロパティの設定
        Private _emp_id As Object
        ' ScaffoldColumn属性の設定により、emp_idを非表示に設定
        <ScaffoldColumn(False)> _
        Public Property emp_id() As Object
            Get
                Return _emp_id
            End Get
            Set(ByVal value As Object)
                _emp_id = value
            End Set
        End Property

    <中略:同様の設定をjob_lvlにも行う>

    End Class
End Class

 実行結果は図11になります。

図11 属性変更後のemployeeテーブルのList.aspx
図11 属性変更後のemployeeテーブルのList.aspx

 また、titlesテーブルのメタデータには、よく使うであろうDisplayFormat属性、StringLength属性、Required属性を次のように設定します。

titles.vb
Imports System.ComponentModel.DataAnnotations

<MetadataType(GetType(titles.titlesMetadata))> _
Public Class titles

    Partial Public Class titlesMetadata

        Private _pubdate As Object
        ' DisplayFormat属性の設定により、pubdateのフォーマットをyyyy-MM-ddに設定
        <DisplayFormat(DataFormatString:="{0:yyyy-MM-dd}")> _
        Public Property pubdate() As Object
            Get
                Return _pubdate
            End Get
            Set(ByVal value As Object)
                _pubdate = value
            End Set
        End Property

        Private _title As Object
        ' StringLength属性の設定により、titleの最大文字数を50に設定
        ' Required属性の設定により、titleの入力必須のエラーメッセージを設定
        <StringLength(50)> _
        <Required(ErrorMessage:="titleは入力必須です。")> _
        Public Property title() As Object
            Get
                Return _title
            End Get
            Set(ByVal value As Object)
                _title = value
            End Set
        End Property

    End Class
End Class

 実行結果は図13・15になります(属性変更前の画像と対比して見てください)。

図12 属性変更前のtitlesテーブルのList.aspx
図12 属性変更前のtitlesテーブルのList.aspx
図13 属性変更後のtitlesテーブルのList.aspx
図13 属性変更後のtitlesテーブルのList.aspx
図14 属性変更前のtitlesテーブルのEdit.aspx
図14 属性変更前のtitlesテーブルのEdit.aspx
図15 属性変更後のtitlesテーブルのEdit.aspx
図15 属性変更後のtitlesテーブルのEdit.aspx

表示ページのカスタマイズ

 前項でも触れましたが、Dynamic Dataでは基本的に、1つのテンプレートフォルダをすべてのデータモデルで利用する構造になっています。

 これは汎用的であると同時に、細かな点で若干不自由に感じることもあるかと思います。そんな時は、CustomPagesフォルダを使用して、独自のページを作成することで自由な表示ができるようになります。

Authorsフォルダの作成とListページの編集

 CustomPagesフォルダの使用方法は簡単で、直下にテーブル名フォルダを作成し、表示するページ(List/Details/Edit/Insert)を配置するだけです。表示するページはルーティングの設定に依存します。

 今回は「authors」フォルダを作成し、直下にPageTemplatesフォルダのList.aspxをコピーして配置します。

 List.aspxからコードビハインドファイルを削除し(ページディレクティブの指定も削除)、GridViewコントロールのタスクから[列の編集...]を選択します。

 フィールドダイアログ上で、左下に表示される自動生成フィールドのチェックを外し、使用できるフィールドから[DynamicField]を選択して、[追加]ボタンを押します(計6個追加)。

 追加したフィールドには以下の設定を行ってください。

フィールドの設定
HeaderText DataField
lastname au_lname
firstname au_fname
phone phone
city city
state state
zip zip

 表示だけであれば、上記の設定で完成です(図16~17)。サンプルプログラムでは、編集などの不可も行っているので参照してください。

図16 カスタマイズ前のAuthorsテーブルのListページ
図16 カスタマイズ前のAuthorsテーブルのListページ
図17 カスタマイズしたAuthorsテーブルのListページ
図17 カスタマイズしたAuthorsテーブルのListページ

次のページ
まとめ

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

  • 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 Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

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

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

この記事をシェア

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

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング