dynamic data

19
DynamicData なら簡単! 動きを確認しながら作る社内 Web アプリ VSUG フォーラムリーダ 小野@どっとねっとふぁん

Upload: visual-studio-users-group-japan

Post on 28-May-2015

2.061 views

Category:

Documents


0 download

DESCRIPTION

Dynamic Dataを使い、各種データコントロールの生産性を十分に引き出すWebアプリの作成方法をご紹介します。

TRANSCRIPT

Page 1: Dynamic Data

DynamicDataなら簡単!

動きを確認しながら作る社内Webアプリ

VSUG フォーラムリーダ

小野@どっとねっとふぁん

Page 2: Dynamic Data

Dynamic Dataの基礎

Page 3: Dynamic Data

・利用するテンプレートを選択する

Dynamic Data Linq to SQL Web Site

Dynamic Data Linq to SQL Web Application

(LINQ to SQL を利用する:LinqDataSource)

Dynamic Data Entities Web Site

Dynamic Data Entities Web Application

(Entity Frameworkを利用する:EntityDataSource)

Page 4: Dynamic Data

・利用するデータモデルを追加する

LINQ to SQLクラス

ADO.NET Entity Data Model

Page 5: Dynamic Data

・Global.asaxの設定

DataContextの設定とScaffoldAllTables

routes定義の変更

一覧/詳細/挿入/更新をページ毎に処理

一覧/詳細/挿入/更新を1つのページ内で処理

Page 6: Dynamic Data

Dynamic Dataの基礎終わり!

Routingから対象テーブル名、ページテンプレートを取得

ページに用意されたコントロール群がデータを適切に表示

DynamicDataManager、LinqDataSource、GirdView 等

個々の値の表示はフィールドテンプレート(ascx:ユーザコントロール)が行う

Page 7: Dynamic Data

ページテンプレートに頼らない

GridView/LinqDataSource/DynamicDataManagerを設定

コードでDynamicDataManagerとGridViewを連結

この場合、Routingは必須要素ではない

Page 8: Dynamic Data

計算結果項目の追加 Userのパーシャルクラスを作成し、プロパティを追加

[ScaffoldColumn(true)] <- DynamicDataの表示対象とする [ReadOnly(true)] <- 読み取り専用 [DisplayFormat(ApplyFormatInEditMode=true, DataFormatString="{0}歳")] public int age { get { int _age = DateTime.Now.Year - birthday.Year; if (birthday.AddDays(-1).AddYears(_age) > DateTime.Now)_age--; return _age; } }

Page 9: Dynamic Data

削除フラグの非表示 LinqDataSourceで削除フラグが立っていないデータに絞り込み

LinqDataSourceではテーブルの全項目を対象としないと追加/更新/削除不可 絞り込みは特定のデータだけでなく、ほかのコントロール等の値と連携することも可

MetaDataクラスを作成し、プロパティに属性をつける

[MetadataType(typeof(UserMetaData))] <- MetaDataクラス名の指定 public partial class User { … public class UserMetaData <- 通常のクラスでもインナークラスでも可 { [ScaffoldColumn(false)] <- DynamicDataの表示対象からはずす public object delflg { get; set; } <- 元のクラスのプロパティと名前さえ合っていればよい }

Page 10: Dynamic Data

項目の並べ替え

DynamicFieldを追加

項目の表示名を設定

Page 11: Dynamic Data

ListViewの利用

ListView/LinqDataSource/DynamicDataManagerを設定

ListViewの構成時に「動的なデータを有効にする」

データ項目の並び替え/非表示項目の削除 ItemTemplate AlternatingItemTemplate InsertItemTemplate LayoitTemplate(項目の表示名を設定) EditItemTemplate SelectedItemTemplate

Page 12: Dynamic Data

エラーメッセージの変更

[Required(ErrorMessage="名前を入力してください")]

<- 必須エラーメッセージ

public object name { get; set; }

[Required(ErrorMessage="生年月日を入力してください")]

public object birthday { get; set; }

データベースではNUll許容の項目を必須とすることも可

Page 13: Dynamic Data

表示方法の変更

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy/MM/dd}")]

public object birthday { get; set; }

DateTimeを日付のみ表示にするといったことが可

Page 14: Dynamic Data

入力文字列の評価

[RegularExpression(

@"¥w+([-+.']¥w+)*@¥w+([-.]¥w+)*¥.¥w+([-.]¥w+)*",

ErrorMessage = "メールアドレスとして正しい値を

入力してください")]

public object mail { get; set; }

正規表現を用いて入力チェック

Page 15: Dynamic Data

値変換エラーのメッセージ変更 専用のエラーチェック属性クラスを作成する [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)] sealed public class DateTimeCheckAttribute : ValidationAttribute { public override bool IsValid(object value) { DateTime dt; return DateTime.TryParse((string)value, out dt); } } [DateTimeCheck(ErrorMessage = "生年月日に日付として正しい値を入力してください")] public object birthday { get; set; }

Page 16: Dynamic Data

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

[UIHint("ForeignKeyText")] <- 利用するフィールドテンプレートを指定 public object Gender { get; set; }

デフォルトでは項目のタイプから自動で判断

用意されているフィールドテンプレートをコピーし、修正するのが便利

Type名.ascx、Type名_Edit.ascxが利用される 存在しないType名を指定するとデフォルトの動作にな

コードビハインド側のクラス名の修正を忘れずに(こちらがキー)

Page 17: Dynamic Data

エラーのサマリー表示

ValidationSummaryを追加

ListViewではValidationGroup="Insert"用のValidationSummaryも必要

フィールドテンプレート内のValidatorのTextに"*"を設定

Page 18: Dynamic Data

項目間の関係による入力チェック LINQ to SQLクラスではパーシャルメソッドが利用できる ValidationExceptionを返す

partial void OnValidate(System.Data.Linq.ChangeAction action) { if (gid == 1 && age < 18) throw new ValidationException("男性は18歳以上しか登録できません"); if (gid == 2 && age < 16) throw new ValidationException("女性は16歳以上しか登録できません"); }

actionの値で、追加/更新/削除それぞれの場合の動作を指定可能 DynamicValidatorを追加し、ListViewに連結 ValidationGroup="Insert"用も忘れずに

Page 19: Dynamic Data

今日のまとめ

DataAnnotationの属性一覧

@ITの記事が参考になる

DBアプリをコーディングレスで構築する「ASP.NET Dynamic Data」

データベースがあれば、とりあえず動くものをみせて、そこでのエラーチェック、表示は徐々に変えていける