SlideShare ist ein Scribd-Unternehmen logo
1 von 19
Downloaden Sie, um offline zu lesen
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」


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

Weitere ähnliche Inhalte

Ähnlich wie 20091207

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を入門してみた一希 大田
 
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略takezoe
 
Html5 Web Applications
Html5  Web ApplicationsHtml5  Web Applications
Html5 Web Applicationstotty jp
 
クラウド・アプリケーション・モデリングへのアプローチ
クラウド・アプリケーション・モデリングへのアプローチクラウド・アプリケーション・モデリングへのアプローチ
クラウド・アプリケーション・モデリングへのアプローチTomoharu ASAMI
 
pi-15. カプセル化, MVCモデル, オブジェクトのマッピング
pi-15. カプセル化, MVCモデル, オブジェクトのマッピングpi-15. カプセル化, MVCモデル, オブジェクトのマッピング
pi-15. カプセル化, MVCモデル, オブジェクトのマッピングkunihikokaneko1
 
サーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよサーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよkoji lin
 
Active Directoryデータのプロパティ出力(Output Properties)
Active Directoryデータのプロパティ出力(Output Properties)Active Directoryデータのプロパティ出力(Output Properties)
Active Directoryデータのプロパティ出力(Output Properties)Michio Koyama
 
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
 
Windows ストア lob アプリ開発のためのガイダンスとフレームワークのご紹介 rev
Windows ストア lob アプリ開発のためのガイダンスとフレームワークのご紹介 revWindows ストア lob アプリ開発のためのガイダンスとフレームワークのご紹介 rev
Windows ストア lob アプリ開発のためのガイダンスとフレームワークのご紹介 revShotaro Suzuki
 
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
 
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
 
初めての Data api
初めての Data api初めての Data api
初めての Data apiYuji Takayama
 

Ähnlich wie 20091207 (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プロジェクト徹底攻略
 
Html5 Web Applications
Html5  Web ApplicationsHtml5  Web Applications
Html5 Web Applications
 
クラウド・アプリケーション・モデリングへのアプローチ
クラウド・アプリケーション・モデリングへのアプローチクラウド・アプリケーション・モデリングへのアプローチ
クラウド・アプリケーション・モデリングへのアプローチ
 
pi-15. カプセル化, MVCモデル, オブジェクトのマッピング
pi-15. カプセル化, MVCモデル, オブジェクトのマッピングpi-15. カプセル化, MVCモデル, オブジェクトのマッピング
pi-15. カプセル化, MVCモデル, オブジェクトのマッピング
 
jQuery超入門編
jQuery超入門編jQuery超入門編
jQuery超入門編
 
Entity Framework
Entity FrameworkEntity Framework
Entity Framework
 
サーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよサーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよ
 
Active Directoryデータのプロパティ出力(Output Properties)
Active Directoryデータのプロパティ出力(Output Properties)Active Directoryデータのプロパティ出力(Output Properties)
Active Directoryデータのプロパティ出力(Output Properties)
 
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
 
Mvc conf session_4_ono
Mvc conf session_4_onoMvc conf session_4_ono
Mvc conf session_4_ono
 
Windows ストア lob アプリ開発のためのガイダンスとフレームワークのご紹介 rev
Windows ストア lob アプリ開発のためのガイダンスとフレームワークのご紹介 revWindows ストア lob アプリ開発のためのガイダンスとフレームワークのご紹介 rev
Windows ストア lob アプリ開発のためのガイダンスとフレームワークのご紹介 rev
 
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勉強会(入門編)
 
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 どうでしょう - 大阪夏の陣
 
初めての Data api
初めての Data api初めての Data api
初めての Data api
 

Mehr von 小野 修司 (20)

20140322
2014032220140322
20140322
 
20121215
2012121520121215
20121215
 
20120616
2012061620120616
20120616
 
20120609
2012060920120609
20120609
 
20120128
2012012820120128
20120128
 
20111203
2011120320111203
20111203
 
20100313
2010031320100313
20100313
 
20100224
2010022420100224
20100224
 
20090711
2009071120090711
20090711
 
20090606
2009060620090606
20090606
 
20090328
2009032820090328
20090328
 
20090212
2009021220090212
20090212
 
20081003
2008100320081003
20081003
 
20080630
2008063020080630
20080630
 
20080627 2
20080627 220080627 2
20080627 2
 
20080627 1
20080627 120080627 1
20080627 1
 
20080524
2008052420080524
20080524
 
20080213
2008021320080213
20080213
 
20080201
2008020120080201
20080201
 
20071204
2007120420071204
20071204
 

20091207

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