SlideShare una empresa de Scribd logo
1 de 19
Descargar para leer sin conexión
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」


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

Más contenido relacionado

Destacado (6)

Vsug architect academy_sakakibara_20101016
Vsug architect academy_sakakibara_20101016Vsug architect academy_sakakibara_20101016
Vsug architect academy_sakakibara_20101016
 
Vsug2011 lt
Vsug2011 ltVsug2011 lt
Vsug2011 lt
 
VSUG DAY_ ICHIGAN
VSUG DAY_ ICHIGANVSUG DAY_ ICHIGAN
VSUG DAY_ ICHIGAN
 
Windows Azure Programming
Windows Azure ProgrammingWindows Azure Programming
Windows Azure Programming
 
OpenStackベースのハイブリッド・クラウドで変わるITの姿
OpenStackベースのハイブリッド・クラウドで変わるITの姿OpenStackベースのハイブリッド・クラウドで変わるITの姿
OpenStackベースのハイブリッド・クラウドで変わるITの姿
 
さようなら、オートシェイプ
さようなら、オートシェイプさようなら、オートシェイプ
さようなら、オートシェイプ
 

Similar a Dynamic Data

Android Architecture Componentsの新機能
Android Architecture Componentsの新機能Android Architecture Componentsの新機能
Android Architecture Componentsの新機能Damper Matsu
 
Windows ストアアプリのgrid viewを入門してみた
Windows ストアアプリのgrid viewを入門してみたWindows ストアアプリのgrid viewを入門してみた
Windows ストアアプリのgrid viewを入門してみた一希 大田
 
サーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよサーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよkoji lin
 
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略takezoe
 
Html5 Web Applications
Html5  Web ApplicationsHtml5  Web Applications
Html5 Web Applicationstotty jp
 
クラウド・アプリケーション・モデリングへのアプローチ
クラウド・アプリケーション・モデリングへのアプローチクラウド・アプリケーション・モデリングへのアプローチ
クラウド・アプリケーション・モデリングへのアプローチTomoharu ASAMI
 
VSUG Day 2010 Summer - Using ADO.NET Entity Framework
VSUG Day 2010 Summer - Using ADO.NET Entity FrameworkVSUG Day 2010 Summer - Using ADO.NET Entity Framework
VSUG Day 2010 Summer - Using ADO.NET Entity FrameworkAtsushi Fukui
 
pi-15. カプセル化, MVCモデル, オブジェクトのマッピング
pi-15. カプセル化, MVCモデル, オブジェクトのマッピングpi-15. カプセル化, MVCモデル, オブジェクトのマッピング
pi-15. カプセル化, MVCモデル, オブジェクトのマッピングkunihikokaneko1
 
html5j.orgがHTML5+JavaScriptで Metro Style アプリを作ってみた
html5j.orgがHTML5+JavaScriptで Metro Style アプリを作ってみた html5j.orgがHTML5+JavaScriptで Metro Style アプリを作ってみた
html5j.orgがHTML5+JavaScriptで Metro Style アプリを作ってみた Shumpei Shiraishi
 
SpringBootによるDB更新
SpringBootによるDB更新SpringBootによるDB更新
SpringBootによるDB更新iPride Co., Ltd.
 
学生向けAndroid勉強会(入門編)
学生向けAndroid勉強会(入門編)学生向けAndroid勉強会(入門編)
学生向けAndroid勉強会(入門編)Itsuki Kuroda
 
Windows ストア lob アプリ開発のためのガイダンスとフレームワークのご紹介 rev
Windows ストア lob アプリ開発のためのガイダンスとフレームワークのご紹介 revWindows ストア lob アプリ開発のためのガイダンスとフレームワークのご紹介 rev
Windows ストア lob アプリ開発のためのガイダンスとフレームワークのご紹介 revShotaro Suzuki
 
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825 Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825 miso- soup3
 
初めての Data api cms どうでしょう - 大阪夏の陣
初めての Data api   cms どうでしょう - 大阪夏の陣初めての Data api   cms どうでしょう - 大阪夏の陣
初めての Data api cms どうでしょう - 大阪夏の陣Yuji Takayama
 

Similar a Dynamic Data (20)

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

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