Web フォームにユーザの一覧と選択したユーザの情報を表示します。(クリックすると新しいウィンドウで拡大図が表示されます。)
データバインドには ObjectDataSource を使ってます。(DomainUser クラスをビジネスオブジェクトとする ObjectDataSource を 3つ)
※DomainUser クラスの詳細はこちら(VB版 C#版)
一覧及び所属するグループは Windows アプリと同じく ListBox を使ってます。
詳細の方は FormView を使ってます。所属するグループは FormView 内に配置してます。
デザイナで次の設定をしてます。
・一覧 ListBox 用の ObjectDataSource に SELECT 操作として GetUsers メソッドを選択
・一覧 ListBox の AutoPostBack を有効にする
・一覧 ListBox のデータソースに上記 ObjectDataSource を選択
・表示データ フィールドは「DisplayName」を選択、値データ フィールドは「Name」を選択
・FormView 用の ObjectDataSource に SELECT 操作として FindByName メソッドを選択
・パラメーター ソースは「Control」を選択し、ControlID は一覧 ListBox の ID を選択
・FormView のデータソースに上記 ObjectDataSource を選択
・詳細の各表示用コントロールの DataBindings のプロパティ(Text や Checked)に 上記データソースの対応するプロパティを指定
・所属するグループ ListBox 用の ObjectDataSource に SELECT 操作として GetBelongGroups メソッドを選択
・パラメーター ソースは「Control」を選択し、ControlID は一覧 ListBox の ID を選択
・所属するグループ ListBox のデータソースに上記 ObjectDataSource を選択
・FormView を囲う UpdatePanel の AsyncPostBackTrigger に 一覧 ListBox の SelectedIndexChanged を指定
コードで次の処理をしてます。
・一覧 ListBox 用 ObjectDataSource の SELECT 操作完了時(Selected イベント)に、取得したユーザの数を表示
・FormView 用と所属するグループ ListBox 用の ObjectDataSource の SELECT 操作前(Selecting イベント)に、ユーザが未選択ならイベントをキャンセル
取得したユーザの数は、イベントデータ(ObjectDataSourceStatusEventArgs)の ReturnValue プロパティを ICollection にキャストしてその Count プロパティで取得してます。
Web フォームの場合は Windows フォームと違って、選択したユーザのオブジェクト(DomainUser クラスのインスタンス)は再度取得する必要があります。
今はユーザを表示するだけなのでフォーム側に書くコードは数行です。