この特集のトップページへ
>
Chapter 7:プレゼンテーション層の構築
●[送付]ボタンと[送付取消]ボタンが押されたときの処理
ユーザーがFormBillフォームで[送付]ボタンや[送付取消]ボタンを押したときには,それぞれ請求書の状態を「送付ずみ」や「送付まえ」に戻す必要がある。 ○[送付]ボタンが押されたときの処理
[送付]ボタン(BTN_SENDボタン)が押されたときには,Business.BillコンポーネントのSendBillメソッド(List 6-188)を呼び出せば,特定の請求書の状態を「送付ずみ」とすることができる。
しかし,請求書の状態を「送付ずみ」にする作業は,主に請求書の印刷後にまとめて実行されることが多いと思われるので,カレント行のみを対象とするように実装したのではユーザーに不便を強いることになる。なぜなら,たとえば100枚の請求書の状態をすべて「送付ずみ」にするためには,[送付]ボタンを100回押す必要があるからである。
そこで,[送付]ボタンが押されたときには,カレント行だけでなく,DGrid_Billデータグリッドで選択されているすべての行(請求書)を,いっせいに「送付ずみ」の状態に変更できるようにする。すでに,「○全伝票の明細を印刷できるようにする」の処理で少し説明したように,データグリッドコントロールでは,[SHIFT]キーを押しながら行を選択することで,その行は反転され,選択状態となる。選択状態となった行は,ブックマークとしてデータグリッドコントロールのSelBookmarksコレクションに格納される。つまり,[送付]ボタンが押されたときにDGrid_BillデータグリッドのSelBookmarksコレクションを調べ,そこに含まれている全レコードに対してBusiness.BillコンポーネントのSendBillメソッド(List 6-188)を呼び出せば,選択されたすべての請求書の状態をいっせいに「送付ずみ」に変更できることになる。実際にそのような処理を実装したものが,List 7-196である。
List 7-196では,まず12行目でSelBookmarksコレクションのCountプロパティを調べ,ユーザーがいくつかの行を選択しているかどうかを判断する。Countプロパティが0のときには,SelBookmarksコレクションに選択された行のブックマークが1つも含まれていない――つまり,選択状態になっている行はない――ということになる。この場合には,13〜15行目を実行し,カレント行となっているレコードのみを送付ずみとする。
そうではなく,SelBookmarksコレクションにいくつかのブックマークが含まれている場合には,17〜24行目が実行される。17〜24行目の処理では,18〜24行目のFor Each〜NextループでSelBookmakrsコレクションに含まれているブックマークを列挙し,各ブックマークに対応しているレコードに対し,「送付ずみ」にする処理をしている。
○[送付取消]ボタンが押されたときの処理[送付取消]ボタン(BTN_CANCELSENDボタン)が押されたときには,請求書の状態を「送付まえ」に戻すという処理をする。請求書の状態を「送付まえ」に戻すには,Business.BillコンポーネントのCancelSendBillメソッド(List 6-189)を用いればよい。送付の取り消し処理でも,送付処理と同様に,ユーザーがDGrid_Billデータグリッドで複数の行を選択していたならば,選択されているすべての請求書の状態を「送付まえ」に戻すという処理にする。その実装は,List 7-197のようになる。 ○データグリッドコントロールがダブルクリックされたときに全列を選択状態にする
List 7-196で示した[送付]ボタンが押されたときの処理,ならびにList 7-197で示した[送付取消]ボタンが押されたときの処理では,ユーザーが選択した全請求書が対象となるため,ユーザーの便宜を図ったことになる。しかし,このような機能を実装したとしても,データグリッドコントロールでは「ある特定の範囲をマウスでドラッグして選択する」という動作をサポートしていないため,ユーザーは1つ1つ[SHIFT]キーを押しながら行を選択する必要がある。このような仕様では,特に多数の行を選択する場合,かなりの手間がかかってしまう。
そこで,さらなる便宜を図るため,DGrid_Billデータグリッドがダブルクリックされたときには,DGrid_Billデータグリッドに表示されている全請求書を選択対象とする(つまり反転表示させる)ことにする。それには,DGrid_Billデータグリッドがダブルクリックされたときに発生するDblClickイベントで,List 7-198の処理を実装する。
すでに説明したように,選択されている行を示すブックマークは,データグリッドコントロールのSelBookmarksコレクションに格納される。SelBookmarksコレクションでは,データを読み取るのみではなく,変更することもできる。具体的には,List 7-198の7行目にあるように,SelBookmarksコレクションのAddメソッドを使って任意のブックマークを登録することで,そのデータが選択された行として追加される。ちなみに,Removeメソッドを使えば,選択されている行から特定の行だけを省くという処理も実現可能である。
List 7-198では,グローバル変数g_objRec(これはDGrid_Billデータグリッドと結び付けられているADODB.Recordsetオブジェクトを保持する変数である)が保持するADODB.Recordsetオブジェクトのカレント行を,先頭から順に末尾に向かって移動させ,そのブックマークを次々とDGrid_BillデータグリッドのSelBookmarksコレクションに追加してゆくという処理をしている。つまり,この処理によって,DGrid_Billデータグリッドに表示されている全レコードがSelBookmarksコレクションに登録され,すべてのレコードが選択状態になる。
| 126/134 |
