Dynamic Data

2,302 views

Published on

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

1 Comment
0 Likes
Statistics
Notes
  • As one of the USA’s fastest growing property management companies in South Florida. Our commitment to excellence and customer satisfaction is what sets us apart. http://www.angelpm.com

    Our mission is to provide the best services for your property and/or community, with the highest efficiency, at the lowest cost.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Be the first to like this

No Downloads
Views
Total views
2,302
On SlideShare
0
From Embeds
0
Number of Embeds
172
Actions
Shares
0
Downloads
24
Comments
1
Likes
0
Embeds 0
No embeds

No notes for slide

Dynamic Data

  1. 1. DynamicDataなら簡単! 動きを確認しながら作る社内 Webアプリ VSUG フォーラムリーダ 小野@どっとねっとふぁん
  2. 2. Dynamic Dataの基礎
  3. 3. ・利用するテンプレートを選択する  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)
  4. 4. ・利用するデータモデルを追加する  LINQ to SQLクラス  ADO.NET Entity Data Model
  5. 5. ・Global.asaxの設定  DataContextの設定とScaffoldAllTables  routes定義の変更  一覧/詳細/挿入/更新をページ毎に処理  一覧/詳細/挿入/更新を1つのページ内で処理
  6. 6. Dynamic Dataの基礎終わり!  Routingから対象テーブル名、ページテン プレートを取得  ページに用意されたコントロール群が データを適切に表示  DynamicDataManager、LinqDataSource、 GirdView 等  個々の値の表示はフィールドテンプレー ト(ascx:ユーザコントロール)が行う
  7. 7. ページテンプレートに頼らない  GridView/LinqDataSource/ DynamicDataManagerを設定  コードでDynamicDataManagerとGridView を連結  この場合、Routingは必須要素ではない
  8. 8. 計算結果項目の追加  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; } }
  9. 9. 削除フラグの非表示  LinqDataSourceで削除フラグが立っていないデータに絞り込み  LinqDataSourceではテーブルの全項目を対象としないと追加/更新/削除不可  絞り込みは特定のデータだけでなく、ほかのコントロール等の値と連携することも可  MetaDataクラスを作成し、プロパティに属性をつける [MetadataType(typeof(UserMetaData))] <- MetaDataクラス名の指定 public partial class User { … public class UserMetaData <- 通常のクラスでもインナークラスでも可 { [ScaffoldColumn(false)] <- DynamicDataの表示対象からはずす public object delflg { get; set; } <- 元のクラスのプロパティと名前さえ合っていればよい }
  10. 10. 項目の並べ替え  DynamicFieldを追加  項目の表示名を設定
  11. 11. ListViewの利用  ListView/LinqDataSource/ DynamicDataManagerを設定  ListViewの構成時に「動的なデータを有効に する」  データ項目の並び替え/非表示項目の削除  ItemTemplate  AlternatingItemTemplate  InsertItemTemplate  LayoitTemplate(項目の表示名を設定)  EditItemTemplate  SelectedItemTemplate
  12. 12. エラーメッセージの変更 [Required(ErrorMessage="名前を入力してください")] <- 必須エラーメッセージ public object name { get; set; } [Required(ErrorMessage="生年月日を入力してください")] public object birthday { get; set; }  データベースではNUll許容の項目を必須と することも可
  13. 13. 表示方法の変更 [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy/MM/dd}")] public object birthday { get; set; }  DateTimeを日付のみ表示にするといった ことが可
  14. 14. 入力文字列の評価 [RegularExpression( @"¥w+([-+.']¥w+)*@¥w+([-.]¥w+)*¥.¥w+([-.]¥w+)*", ErrorMessage = "メールアドレスとして正しい値を 入力してください")] public object mail { get; set; }  正規表現を用いて入力チェック
  15. 15. 値変換エラーのメッセージ変更  専用のエラーチェック属性クラスを作成する [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; }
  16. 16. カスタムフィールドテンプレート [UIHint("ForeignKeyText")] <- 利用するフィールドテンプレートを指定 public object Gender { get; set; }  デフォルトでは項目のタイプから自動で判断  用意されているフィールドテンプレートをコピーし、 修正するのが便利  Type名.ascx、Type名_Edit.ascxが利用される  存在しないType名を指定するとデフォルトの動作にな る  コードビハインド側のクラス名の修正を忘れずに(こ ちらがキー)
  17. 17. エラーのサマリー表示  ValidationSummaryを追加  ListViewではValidationGroup="Insert"用の ValidationSummaryも必要  フィールドテンプレート内のValidatorの Textに"*"を設定
  18. 18. 項目間の関係による入力チェック  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"用も忘れずに
  19. 19. 今日のまとめ  DataAnnotationの属性一覧  @ITの記事が参考になる  DBアプリをコーディングレスで構築する 「ASP.NET Dynamic Data」  データベースがあれば、とりあえず動く ものをみせて、そこでのエラーチェック、 表示は徐々に変えていける

×