• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
20091207
 

20091207

on

  • 466 views

 

Statistics

Views

Total Views
466
Views on SlideShare
466
Embed Views
0

Actions

Likes
0
Downloads
0
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    20091207 20091207 Presentation Transcript

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