画面の定義
画面定義は「Unify.aspx」にあります。MultiViewコントロール「mtvw」にViewコントロール「vwSearch」(検索条件設定画面)と「vwTarget」(削除対象会員選択画面)を順に配置し、「vwSearch」ビューには、図6の上の画面のようにコントロールを配置します。
対象列 | CheckBox | TextBox |
姓(漢字) | chbSeiKanji | txtSeiKanji |
名(漢字) | chbMeiKanji | txtMeiKanji |
姓(カナ) | chbSeiKana | txtSeiKana |
名(カナ) | chbMeiKana | txtMeiKana |
住所1 | chbAddress1 | txtAddress1 |
電話番号 | chbTelNum | txtTelNum |
携帯番号 | chbMobileNum | txtMobileNum |
「vwTarget」ビューにはGridViewコントロールを配置し、データソースの指定では、ビジネスオブジェクトとして作成済の「Unify」クラスを選択、[データメソッドの定義]では[SELECT]タブにある[メソッドの選択]で作成済みの「getWMemberDataReader~」関数を選択します。[パラメーターの定義]では「氏名(姓)漢字」に関する2個は下表のように選択します。残り12個のパラメーターについても同様に選択してください。
名前 | パラメーターソース | ControlID |
blnSeiKanji | Control | chbSeiKanji |
strSeiKanji | Control | txtSeiKanji |
次に図6の下の画面のように、列を設定します。まず、ユーザが選択できるよう、GridViewの一番左にCheckBox列を追加し、TemplateFieldに変換します(名前は「CB1」)。
2列目に主キーであるMemberID列をBoundField列として追加します。
後は、表3のうち表示したい列をBoundField列として追加してください。
最後に、余分な列を削除するため、[自動生成フィールド]のチェックを外します。
ロジックの定義
「Unify.aspx」配下の「Unify.aspx.vb」にあり、主なプロシージャは2つです。
第1の「btnSearch_Click」は、検索条件設定画面で[検索する]ボタンがクリックされた時の処理で、条件に従いデータ取得に成功すれば、削除対象会員選択画面に遷移します。
'(1)検索条件で重複チェック列が最低1つ指定されているか If Not (chbSeiKanji.Checked Or chbMeiKanji.Checked Or chbSeiKana.Checked Or chbMeiKana.Checked Or chbAddress1.Checked Or chbTelNum.Checked Or chbMobileNum.Checked) Then (略) '(2)指定された検索条件で抽出した結果セットをGridViewにバインドする gvUnify.DataBind() If gvUnify.Rows.Count = 0 Then (略)
(1)全チェックの有無をORで繋いだ条件がTRUEなら、最低1つは選択されています。その否定(Not)がTRUEならすべて未選択なので、重複値チェックをせず、処理を中断します。
(2)GridViewにバインドした抽出行数が0であれば、処理を中断します。
第2の「btnUnify_Click」は、削除対象会員選択画面で[名寄せ処理実行]ボタンがクリックされた時の処理で、チェックされた会員について会員テーブルから削除します。
(略) '(1)検索された会員一覧(GridView)を走査し、チェック数を数える For Each row As GridViewRow In gvUnify.Rows 'GridView各行について繰り返す If CType(row.FindControl("CB1"), CheckBox).Checked Then aryIdx += 1 ReDim Preserve aryMemberID(aryIdx) aryMemberID(aryIdx) = row.Cells(1).Text 'GridViewの2列目が会員ID End If Next (略) '(2)チェックされた会員IDについて、会員テーブルから削除する strSQL = "DELETE Member WHERE MemberID IN (" & Join(aryMemberID, ",") & ")" (略)
(1)重複値チェックの結果を表示したGridViewの各行について、チェックが付けられたかどうかを走査します。GridViewのチェック状況は、GridViewRowオブジェクト変数で各行を取得し、FindControlメソッドで見つけた"CB1"をCheckBoxオブジェクトに変換した上、そのCheckedプロパティの論理値で判断できます。これがTRUEなら該当行はチェックされているので、該当行のCellsプロパティの2番目(インデックスは0始まり)のTextプロパティにある会員IDを取得し、用意したaryMemberID配列を拡張して格納します(上記の結果、一人もチェックされていなければ、処理を中断します)。
(2)チェックされた会員IDを持つレコードを会員テーブルから削除します。
まとめ
銀行口座や年金問題などで話題の名寄せ処理ですが、通常の会員管理や顧客管理のシステムでも定常的に必要になります。皆様のシステムに応用されてはいかがでしょうか。
次回は、名寄せ処理の部分をもう少し実践的にして、ASP.NETでは、標準のサーバーコントロールではできない実装方法の例を紹介する予定です。