組織単位リスト画面の Web アプリの方です。
左が開発画面で右が実行画面です。(すべての図はクリックすると新しいウィンドウで拡大図が表示されます。)
組織単位(OU)は階層構造になってるので他のオブジェクトと違って 一覧の表示は Windows アプリと同じく ListBox じゃなく TreeView を使ってます。
ObjectDataSource のビジネスオブジェクトは OrganizationalUnit クラスを指定してます。
※OrganizationalUnit クラスの詳細はこちら(VB, C#, 説明)
デザイナでは次の設定をしてます。
・一覧 TreeView の BorderStyle に Solid を指定し、ShowLines に True を指定
・DetailDataSource の SELECT 操作として FindByPath メソッドを選択
・パラメーター ソースは「Control」を選択し、ControlID は一覧 TreeView の ID を選択
・詳細 FormView 内の各表示用コントロールのタスクから DataBindings の編集で、バインドするフィールドに対応する OrganizationalUnit クラスのプロパティを指定(下図)
・詳細 FormView の DataSourceID に DetailDataSource を指定
・FormView を囲む UpdatePanel の AsyncPostBackTrigger に 一覧 TreeView の SelectedNodeChanged を指定
・データ表示用 GridView のタスクから DataBindings の編集で、列「名前」、「種類」、「説明」を追加し、各列の DataField をそれぞれ Name、Type、Description に設定(下図)
・データ表示用 GridView と Label を囲っている Panel の Visible を False に設定
コードでは次の処理をしてます。
1. OU の一覧を取得し、表示用のパスと名前でソートしたものを内部保持してそれを OUBindingSource の DataSource に設定
2. 取得した OU の数を表示
3. 直下のオブジェクト格納用の Dictionary(OU自身のパス/直下のオブジェクトの名前と種類と説明を格納したデータソース用のDataTable)を初期化して ViewState に保持
4. 一覧 TreeView に OU のノードを作成して追加
5. ポストバック時は ViewState から直下のオブジェクト格納用の Dictionary を復元(1. ~ 4. の処理は行わない)
6. 詳細 FormView 用の ObjectDataSource の SELECT 操作前(Selecting イベント)に、OU が未選択ならイベントをキャンセル
7. 詳細 FormView 用の ObjectDataSource の SELECT 操作完了時(Selected イベント)に、データ表示用の Panel を表示して、選択された OU に格納されているデータを表示(直下のオブジェクト格納用の Dictionary も設定)
8. 戻るボタンをクリックすると遷移前の状態のメインページに戻る
コードは別途書きます。