第5回 詳細項目画面の作成とカスタマイズ:連載:Visual Studio 2005によるWindowsデータベース・プログラミング(3/3 ページ)
前回のグリッド画面に続いて詳細画面を作成。検索バーなどを追加しながら、自動作成されるGUIのからくりを理解する。
検索ツールバーの追加
最後に、ここまでに作成した詳細項目画面に検索ツールバーを追加し、検索に該当するレコードのみを編集できるようにしてみます。検索ツールバーを追加した詳細項目画面は次のようになります。
図10 検索ツールバーを追加した詳細項目画面で検索しているところ
ここでは姓に「ing」を含むレコードを検索している。 (1)ラベル
(2)検索キーワードを入力するためのテキストボックス
(3)検索を開始するための[検索]ボタン
この検索ツールバー(ToolStripコントロール)で[検索]ボタンがクリックされると、その隣のテキストボックスに入力された文字列を姓に含むレコードのみがデータベースより読み込まれて編集できるようになります。
この検索機能は、第3回で説明したような検索用のクエリをテーブルアダプタに追加しておき、それを[検索]ボタンがクリックされたときに呼び出すという単純な仕組みですが、Visual Studioには検索ツールバーを作成するための「検索条件ビルダ」が用意されています。ここではそれを使ってみます。
■検索条件ビルダによる検索ツールバーの追加
検索条件ビルダを起動するには、まずデザイナ画面の下に並んでいるBindingSourceコンポーネント(AuthorsBindingSource)か、テーブルアダプタ(AuthorsTableAdapter)を選択します。そして右上にあるタスク・メニューから[クエリの追加]を実行します。あるいは選択後にIDEのメニューから[データ]−[クエリの追加]を実行します。どの方法でも、次のような検索条件ビルダが表示されます。
この画面の最初の項目で「データ ソース テーブル」と表記されているのは「データテーブル」のことです。ここにはすでにデータセット(PUBSDataSet)内のデータテーブル(authors)が選択されているはずです。
「新しいクエリ名」にはテーブルアダプタに追加するメソッド名を指定します。ここでは「FillByLastName」としましょう。
そして最後の欄には、クエリにより実行されるSQL文を記述します。これには[クエリ ビルダ]ボタンをクリックして、クエリ・ビルダを実行します(図12)。
ここでは、au_lname列の値が検索ツールバーに入力された文字列に部分一致するようなレコードを取得したいので、「au_lname」列の「フィルタ」のセルに、
LIKE '%' + @lname + '%'
と入力しています。
「@lname」の部分は外部から値を指定するための「名前付きパラメータ」です。パラメータ名は何でも構いません。「%」はSQL Serverでのワイルドカード文字です。
例えば「ing」で検索された場合には、このLIKE文は最終的に「LIKE '%ing%'」となり、au_lname列に「ing」を含む「Gringlesbyさん」や「Stringerさん」のレコードが編集できるようになります。
クエリ・ビルダと検索条件ビルダを[OK]ボタンをクリックして閉じるとフォームは次のような画面になります。あとは、検索ツールバー上のラベルとボタンのテキストを適当に変更して完成です。
図13 検索ツールバーが追加されたフォーム
検索条件ビルダの設定が完了すると自動的に検索ツールバーがフォームに配置される。ここでは1つのみだが、ツールバー内のテキストボックスはクエリ内の名前付きパラメータの数に応じて追加される。
コード画面に切り替えると、ToolStripButtonコントロールのClickイベント・ハンドラ(FillByLastNameToolStripButton_Clickメソッド)には次のようなコードが追加されているのが分かります。
Me.AuthorsTableAdapter.FillByLastName(Me.PUBSDataSet.authors, LnameToolStripTextBox.Text)
このコードにより、データセットの内容は検索に引っかかったレコードのみとなります。FillByLastNameメソッドの中身が気になる方は、データセットのコードビハインド・ファイル(デフォルトではファイル名は「PUBSDataSet.Designer.vb」)を見てみてください。
以上、今回はVisual Studioの機能を活用しながら詳細項目画面を作成しました。次回ではマスター/詳細フォームなどを取り上げる予定です。
Copyright© Digital Advantage Corp. All Rights Reserved.