プリンタの一覧を取得・表示して、選択したプリンタの詳細を表示する画面をサンプルアプリに追加しました。
左が Windows アプリで右が Web アプリです。(どれもクリックすると新しいウィンドウで拡大図が表示されます。)
開発画面はこんな感じです。
Windows アプリの BindingSource の DataSource と Web アプリの ObjectDataSource のビジネスオブジェクトは PrintQueue クラスを指定してます。
※PrintQueue クラスの詳細はこちら(VB版 C#版)
Windows アプリはデザイナで次の設定をしてます。
・一覧 ListBox の DataSource に PrinterBindingSource を指定
・詳細の各表示用コントロールの DataBindings のプロパティ(Text や Checked)に 上記データソースの対応するプロパティを指定
また、コードでは次の処理をしてます。
1. プリンタの一覧を取得して BindingSource のデータソースに設定
2. 取得したプリンタの数を表示
コードは次の 2 行だけです。(サンプルアプリではコンストラクタ内に書いてます)
VB
Me.PrinterBindingSource.DataSource = DirectoryAccess.GetPrintQueues() 'プリンタを取得
Me.CountLabel.Text = String.Format("{0} 個のオブジェクト", Me.PrinterBindingSource.Count)
C#
this.PrinterBindingSource.DataSource = DirectoryAccess.GetPrintQueues(); //プリンタを取得
this.CountLabel.Text = String.Format("{0} 個のオブジェクト", this.PrinterBindingSource.Count);
Web アプリはデザイナで次の設定をしてます。
・PrinterDataSource の SELECT 操作として GetPrintQueues メソッドを選択
・一覧 ListBox の AutoPostBack を True にし、DataSourceID に PrinterDataSource を、DataTextField と DataValueField に Name を指定
・DetailDataSource の SELECT 操作として FindByName メソッドを選択
・パラメーター ソースは「Control」を選択し、ControlID は一覧 ListBox の ID を選択
・詳細 FormView の DataSourceID に DetailDataSource を指定
・FormView を囲む UpdatePanel の AsyncPostBackTrigger に 一覧 ListBox の SelectedIndexChanged を指定
・印刷速度と最高解像度の TextBox の AutoPostBack を True にし、UpdatePanel で囲む
コードでは次の処理をしてます。
1. 一覧 ListBox 用 ObjectDataSource の SELECT 操作完了時(Selected イベント)に、取得したプリンタの数を表示
2. 詳細 FormView 用の ObjectDataSource の SELECT 操作前(Selecting イベント)に、プリンタが未選択ならイベントをキャンセル
3. 詳細 FormView 用の ObjectDataSource の SELECT 操作完了時(Selected イベント)に、印刷速度と最高解像度の値を ViewState に保持
4. 印刷速度と最高解像度の値変更時(TextChanged イベント)に値をチェックし、実数なら小数部を切捨て、整数に変換できなければ変更前の値に戻す
5. 戻るボタンをクリックすると遷移前の状態のメインページに戻る
コードは別途書きます。