この特集のトップページへ
Chapter 7:プレゼンテーション層の構築

7.6.5 絞り込み処理
●[絞り込み]チェックボックスが押されたときの処理
 FormStockFilterフォームの実装は,以上で完了である。次に,ユーザーがFormStockフォーム(Fig.7-71)で[絞り込み]チェックボックス(CHK_FILTERチェックボックス)にチェックを付けたときの処理を実装する。

 といっても,この処理は簡単である。単に,RefreshDataプロシージャ(List 7-88)を呼び出し,データグリッドコントロールの内容を更新するだけである。その実装は,List 7-107のようになる。

 List 7-107では,絞り込みにかかわる処理は何もしていない。単に,データグリッドコントロールの内容を更新するだけである。しかし,List 7-88の20行目にあるように,RefreshDataプロシージャはCHK_FILTERチェックボックスがチェックされているかどうかを調べ,チェックされていれば絞り込み条件付きでBusiness.ProductコンポーネントのGetStoragesメソッドを呼び出している。よって,CHK_FILTERチェックボックスがチェックされたときの処理は,単純にRefreshDataプロシージャを呼び出してデータグリッドコントロールの内容を更新するというだけでよい。絞り込みの処理は,RefreshDataプロシージャ内で処理されるからである。

●[絞り込み設定]ボタンが押されたときの処理
 次に,FormStockFilterフォーム(Fig.7-71)において,ユーザーが[絞り込み設定]ボタン(BTN_FILTERボタン)が押されたときの処理を実装する。

 [絞り込み設定]ボタンが押されたときには,FormStockFilterフォーム(Fig.7-76)をユーザーに表示して各種絞り込み条件を設定してもらうということになる。そのためには,すでに実装したFormStockFilterフォームのSetFilterプロシージャ(List 7-105)を呼び出せばよい。実際の実装は,List 7-108のようになる。

 List 7-108において,SetFilterプロシージャを呼び出しているのは3行目である。SetFilterプロシージャを呼び出すことで,FormStockFilterフォームが表示され,ユーザーが設定した絞り込み条件がg_Filterg_startDateg_endDateg_startDueDateg_endDueDateという各変数に格納されて戻ってくる。その後,RefreshDataプロシージャ(List 7-88)を呼び出し,データグリッドの内容を更新すればよいことになる。

 List 7-108の場合,そのままRefreshDataプロシージャを呼び出すのではなく,CHK_FILTERチェックボックスのValueプロパティに0を設定してから1を設定するという方法にした(8,9行目)。こうすることで,CHK_FILTERチェックボックスがチェック状態となるため,List 7-107に示したCHK_FILTER_Clickプロシージャが実行される。CHK_FILTER_Clickプロシージャ内では,RefreshDataプロシージャを呼び出してデータグリッドコントロールを更新するという処理が実装されているので,データグリッドコントロールで表示する内容は,ユーザーが設定した絞り込み条件と合致するものだけに絞られることになる。

 実際には,8行目の処理は必要なく,9行目の処理だけでもよいのだが,CHK_FILTER_ClickプロシージャはCHK_FILTERチェックボックスの状態が変わったときだけしか呼び出されない。そのため,8行目を取り除くと,すでにCHK_FILTERチェックボックスにチェックが付いていたとき(CHK_FILTER.Valueの値が1であるとき)には,CHK_FILTER_Clickプロシージャが呼び出されなくなる。よって,まず8行目でCHK_FILTERチェックボックスを非チェック状態とし,次に9行目でチェック状態にする,という手順で処理しないと,場合によってはCHK_FILTER_Clickプロシージャが呼び出されないという事態が発生する。

●絞り込み機能の問題点
 以上で,絞り込み機能を実装したことになるが,この絞り込み機能には,やや問題点がある。それは,実装上の問題というよりも,ユーザーインタフェース上の問題である。

 絞り込み機能を有効にした場合,当然,その絞り込みの条件に合致しない入出庫情報は,DGrid_Stockデータグリッドに表示されなくなる。これは問題ないようだが,入庫情報の新規登録,編集,入庫施行などの処理をする場合には,少々問題となる。たとえば,ユーザーが出庫情報のみに絞り込んでいたとしよう。このとき,入庫情報を新規登録しても,登録した入庫情報はDGrid_Stockデータグリッドには表示されなくなる。同様に,施行前のものだけに絞り込んでいた場合には,入庫施行を実施すると,その情報は見えなくなる。つまり,ユーザーが施した操作がDGrid_Stockデータグリッドから見えないので,ユーザーは「正しく受け付けられなかったのではないか」と誤解するおそれがある。

 この点はユーザーインタフェースの問題なので,プログラム側で解決することはできない。どのような仕組みを提供すべきかは,業務形態によって異なる。たとえば,ユーザーが[新規][編集][入庫施行]などのボタンを押したときには,一時的に絞り込みを無効にする([絞り込み]のチェックボックスを強制的に非チェック状態としてしまう)といった工夫が必要になることがあるかもしれない。

Prev 92/134 Next