SlideShare a Scribd company logo
DynamicDataなら簡単!
動きを確認しながら作る社内
      Webアプリ


   VSUG フォーラムリーダ
  小野@どっとねっとふぁん
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)
・利用するデータモデルを追加する
 LINQ to SQLクラス
 ADO.NET Entity Data Model
・Global.asaxの設定
 DataContextの設定とScaffoldAllTables
 routes定義の変更
       一覧/詳細/挿入/更新をページ毎に処理
       一覧/詳細/挿入/更新を1つのページ内で処理
Dynamic Dataの基礎終わり!
   Routingから対象テーブル名、ページテン
    プレートを取得
   ページに用意されたコントロール群が
    データを適切に表示
       DynamicDataManager、LinqDataSource、
        GirdView 等
   個々の値の表示はフィールドテンプレー
    ト(ascx:ユーザコントロール)が行う
ページテンプレートに頼らない
 GridView/LinqDataSource/
  DynamicDataManagerを設定
 コードでDynamicDataManagerとGridView
  を連結
 この場合、Routingは必須要素ではない
計算結果項目の追加
   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;
        }
    }
削除フラグの非表示
   LinqDataSourceで削除フラグが立っていないデータに絞り込み
       LinqDataSourceではテーブルの全項目を対象としないと追加/更新/削除不可
       絞り込みは特定のデータだけでなく、ほかのコントロール等の値と連携することも可
   MetaDataクラスを作成し、プロパティに属性をつける

[MetadataType(typeof(UserMetaData))]   <-   MetaDataクラス名の指定
public partial class User
{ …

public class UserMetaData <- 通常のクラスでもインナークラスでも可
{
          [ScaffoldColumn(false)] <- DynamicDataの表示対象からはずす
          public object delflg { get; set; }
                    <- 元のクラスのプロパティと名前さえ合っていればよい
}
項目の並べ替え
 DynamicFieldを追加
 項目の表示名を設定
ListViewの利用
 ListView/LinqDataSource/
  DynamicDataManagerを設定
 ListViewの構成時に「動的なデータを有効に
  する」
 データ項目の並び替え/非表示項目の削除
       ItemTemplate
       AlternatingItemTemplate
       InsertItemTemplate
       LayoitTemplate(項目の表示名を設定)
       EditItemTemplate
       SelectedItemTemplate
エラーメッセージの変更
[Required(ErrorMessage="名前を入力してください")]
        <- 必須エラーメッセージ
public object name { get; set; }


[Required(ErrorMessage="生年月日を入力してください")]
public object birthday { get; set; }


   データベースではNUll許容の項目を必須と
    することも可
表示方法の変更
[DisplayFormat(ApplyFormatInEditMode = true,
DataFormatString = "{0:yyyy/MM/dd}")]
public object birthday { get; set; }


   DateTimeを日付のみ表示にするといった
    ことが可
入力文字列の評価
[RegularExpression(
        @"¥w+([-+.']¥w+)*@¥w+([-.]¥w+)*¥.¥w+([-.]¥w+)*",
        ErrorMessage = "メールアドレスとして正しい値を
        入力してください")]
public object mail { get; set; }


   正規表現を用いて入力チェック
値変換エラーのメッセージ変更
   専用のエラーチェック属性クラスを作成する
[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; }
カスタムフィールドテンプレート
[UIHint("ForeignKeyText")]
       <- 利用するフィールドテンプレートを指定
public object Gender { get; set; }

   デフォルトでは項目のタイプから自動で判断
   用意されているフィールドテンプレートをコピーし、
    修正するのが便利
   Type名.ascx、Type名_Edit.ascxが利用される
   存在しないType名を指定するとデフォルトの動作にな
    る
   コードビハインド側のクラス名の修正を忘れずに(こ
    ちらがキー)
エラーのサマリー表示
 ValidationSummaryを追加
 ListViewではValidationGroup="Insert"用の
  ValidationSummaryも必要
 フィールドテンプレート内のValidatorの
  Textに"*"を設定
項目間の関係による入力チェック
 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"用も忘れずに
今日のまとめ
   DataAnnotationの属性一覧
       @ITの記事が参考になる
           DBアプリをコーディングレスで構築する
            「ASP.NET Dynamic Data」


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

More Related Content

PPTX
20091207
PDF
XOOPS Cube Conference 2012 Developer Workshop 3
PPTX
Active Directoryデータの "大きい整数"
PDF
Xslt
PPTX
Active Directoryデータのプロパティ出力(Output Properties)
PDF
Vsugアーキテクトアカデミー設立のご挨拶
PDF
Parallel Technology
20091207
XOOPS Cube Conference 2012 Developer Workshop 3
Active Directoryデータの "大きい整数"
Xslt
Active Directoryデータのプロパティ出力(Output Properties)
Vsugアーキテクトアカデミー設立のご挨拶
Parallel Technology

Viewers also liked (6)

PDF
Vsug architect academy_sakakibara_20101016
PPTX
PDF
Windows Azure Programming
PDF
OpenStackベースのハイブリッド・クラウドで変わるITの姿
PPTX
さようなら、オートシェイプ
Vsug architect academy_sakakibara_20101016
Windows Azure Programming
OpenStackベースのハイブリッド・クラウドで変わるITの姿
さようなら、オートシェイプ
Ad

Similar to Dynamic Data (20)

PPTX
Android Architecture Componentsの新機能
PDF
Apache Tapestry
PPTX
Windows ストアアプリのgrid viewを入門してみた
PDF
サーバーサイドでの非同期処理で色々やったよ
PDF
Seasarプロジェクト徹底攻略
PDF
jQuery超入門編
PDF
Html5 Web Applications
PDF
クラウド・アプリケーション・モデリングへのアプローチ
PDF
Entity Framework
PDF
VSUG Day 2010 Summer - Using ADO.NET Entity Framework
PDF
Mvc conf session_4_ono
PPTX
20110607
PPTX
html5j.orgがHTML5+JavaScriptで Metro Style アプリを作ってみた
PDF
SpringBootによるDB更新
PPTX
学生向けAndroid勉強会(入門編)
PDF
Windows ストア lob アプリ開発のためのガイダンスとフレームワークのご紹介 rev
PDF
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
PDF
初めての Data api cms どうでしょう - 大阪夏の陣
PDF
IgGrid 入門編
PDF
初めての Data api
Android Architecture Componentsの新機能
Apache Tapestry
Windows ストアアプリのgrid viewを入門してみた
サーバーサイドでの非同期処理で色々やったよ
Seasarプロジェクト徹底攻略
jQuery超入門編
Html5 Web Applications
クラウド・アプリケーション・モデリングへのアプローチ
Entity Framework
VSUG Day 2010 Summer - Using ADO.NET Entity Framework
Mvc conf session_4_ono
20110607
html5j.orgがHTML5+JavaScriptで Metro Style アプリを作ってみた
SpringBootによるDB更新
学生向けAndroid勉強会(入門編)
Windows ストア lob アプリ開発のためのガイダンスとフレームワークのご紹介 rev
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
初めての Data api cms どうでしょう - 大阪夏の陣
IgGrid 入門編
初めての Data api
Ad

Dynamic Data

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