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

head2.gif 7.4.6 顧客の検索
 データグリッドにはたくさんの顧客が登録されることになるから,ユーザーの利便性を考えると,検索機能を持たせるのが望ましい。そこで,アプリケーションに顧客の検索機能を付け加える方法について考えてゆくことにする。

●顧客の検索指定の方法
 ユーザーに顧客を検索させる場合,さまざまなユーザーインタフェースが考えられる。しかし,今回はFig.7-16に示したように,顧客情報を表示するフォームの左上に「検索文字列を入力する場所(TXT_SEARCHテキストボックス)」「検索対象となる列(COMBO_SEARCHFIELDコンボボックス)」「検索ボタン(BTN_SEARCHボタン)」「検索の方向(OPT_UPラジオボタンとOPT_DOWNラジオボタン)」を配置し,そこからユーザーが顧客を検索できるようにする(Fig.7-37)。

Fig.7-37 検索の指定
fig7_37

 Fig.7-37の仕様は,次のようにする。まずユーザーは,COMBO_SEARCHFIELDコンボボックスから検索の対象列名を選択する。COMBO_SEARCHFIELDコンボボックスには,すぐあとで実装するように,DGrid_Customerデータグリッドに表示されているすべての列名(キャプション)――たとえば“顧客番号”や“顧客名”といった列名――が格納される。次に,検索したい文字列をTXT_SEARCHテキストボックスに入力し,OPT_UPラジオボタンとOPT_DOWNラジオボタンで上方向検索か下方向検索かを指定する。そのあと,BTN_SEARCHボタン([検索]ボタン)を押すと,検索が開始される。最終的に,COMBO_SEARCHFIELDコンボボックスで選択した列に,入力した文字列と一致するデータが格納されているレコードを,マーキーが指すように移動する。

●コンボボックスに全列名を格納する処理
 では,DGrid_Customerデータグリッドに表示されている全列名を,Fig.7-37COMBO_SEARCHFIELDコンボボックスに格納する部分から作ってゆくことにする。

 DGrid_Customerデータグリッドに表示されている全列名をCOMBO_SEARCHFIELDコンボボックスに格納することは,さして難しくはない。具体的には,List 7-31のようにすればよい。

 List 7-31で示したSetFieldListプロシージャは,DGrid_Customerデータグリッドに表示されている全列名をCOMBO_SEARCHFIELDコンボボックスにコピーする処理を実現する。

 6行目でまず,COMBO_SEARCHFIELDコンボボックスの内容を空にする。そして,7〜12行目のループにおいてDGrid_Customerデータグリッドに表示されている列の列名をColumnオブジェクトのCaptionプロパティを通じて取得し,それをCOMBO_SEARCHFIELDコンボボックスの内容に付け加える。ただし,8行目のIf文を見るとわかるように,COMBO_SEARCHFIELDコンボボックスにコピーする列は,その列のVisibleプロパティがTrueであるもの,すなわち可視であるものだけとした。

 また,10行目にあるように,COMBO_SEARCHFIELDコンボボックスに追加した列名のItemDataプロパティには,DGrid_Customerデータグリッドに該当するColumnオブジェクトのインデックス番号を格納することにした。これにより,ユーザーがCOMBO_SEARCHFIELDコンボボックスに表示されている列名を選択したとき,その項目のItemDataプロパティを調べることで,選択した列がDGrid_Custonerデータグリッドにおいて何番目のColumnオブジェクトに対応するのかを判定できるようになる(Fig.7-38)。

Fig.7-38 コンボボックスのItemDataプロパティ
fig7_38

 DGrid_Customerデータグリッドの列の表示状態が書き変わるときに,このSetFieldListプロシージャを呼び出せば,DGrid_Customerデータグリッドの列名をCOMBO_SEARCHFIELDコンボボックスにコピーすることができる。今回のサンプルアプリケーションの場合,データグリッドの列の表示状態が書き変わるのは,FormCustomerフォームがロードされたとき(フォームのLoadイベントが発生したとき)と,ユーザーが[表示項目]ボタンを押してデータグリッドに表示する列を変更したとき(「●表示列を設定する」を参照)である。

 そこで,FormCustomerフォームがロードされたときに実行されるForm_Loadプロシージャ(List 7-20)と[表示項目]ボタンが押されたときに実行されるBTN_VIEW_Clickプロシージャ(List 7-24)を,それぞれSetFieldListプロシージャ(List 7-31)を呼び出すように修正しておく(List 7-32List 7-33)。この修正によって,DGrid_Customerデータグリッドに表示されている列名がCOMBO_SEARCHFIELDコンボボックスに格納されるようになる。

prevpg.gif Chapter 7 30/65 nextpg.gif