連載:VS 2005でいってみようDBプログラミング第5回 開発生産性を向上させるASP.NET 2.0のサーバ・コントロール山田 祥寛(http://www.wings.msn.to/)2006/07/01 |
|
|
[4]ページ上のプロパティ情報を設定する
次にページ上のコントロールに対して、必要なプロパティ情報を表5のように設定します。
| ||||||||||||||||||||||||||||||||
表5 wizard.aspxのプロパティ設定 | ||||||||||||||||||||||||||||||||
*5 MyDbは第2回で設定した接続名です。 |
SqlDataSourceコントロールのInsertQueryプロパティでは、ウィザード上で最終的に[完了]ボタンがクリックされたときに実行される挿入(INSERT)コマンドを定義します。
InsertQueryプロパティを定義するには、プロパティ・ウィンドウのInsertQueryプロパティから[...]ボタンをクリックしてください。[コマンドおよびパラメータのエディタ]ダイアログが開きますので、[クエリビルダ]ボタンをクリックします。
図7 [コマンドおよびパラメータのエディタ]ダイアログ(1) |
すると[テーブルの追加]ダイアログが開きますので、本節冒頭で作成したmembersテーブルを選択し、[追加]ボタンをクリックしてください。[閉じる]ボタンをクリックすると[クエリビルダ]ダイアログが開きます。
membersテーブルを追加して[閉じる]ボタンをクリック |
||||||||||||
図8 [クエリビルダ]ダイアログ | ||||||||||||
|
クエリビルダは、[ダイアグラム・ペイン][グリッド・ペイン][SQLペイン][結果ペイン]の4つのペインに分かれています。
ダイアグラム・ペインには先ほど選択したmembersテーブルが表示されますので、オートインクリメントが設定されたmidフィールドを除くすべてのフィールドをチェックします*6。
*6 対象のフィールドをグリッド・ペインにドラッグ&ドロップしても構いません。 |
グリッド・ペインに列が表示されたのを確認できたら、[新しい値]列に、それぞれ、
@ + フィールド名
の形式で値を入力しましょう。「@」で始まる値は、プログラムから動的に引き渡されるパラメータのプレイス・ホルダを表します。この時点でSQLペイン上に以下のようなSQL命令ができていればOKです。
|
[OK]ボタンをクリックすると、先ほどの[コマンドおよびパラメータのエディタ]ダイアログに戻りますので、[パラメータを最新の情報に更新]ボタンをクリックします。これによって、SQL命令に含まれるパラメータがSqlDataSourceコントロール上の挿入パラメータとして登録されました。
図9 [コマンドおよびパラメータのエディタ]ダイアログ(2) |
[パラメータを最新の情報に更新]ボタンをクリックすると、SQL命令上で定義されたプレイス・ホルダをパラメータとして、SqlDataSourceコントロールに登録できる。 |
[5][完了]ボタン・クリック時の処理を定義する
以上でフォーム・デザイナ上の作業は完了です。次に、ウィザード上で[完了]ボタンをクリックしたときの処理をイベント・ハンドラに記述してみましょう。コード・エディタから以下のように記述してください。
| |
リスト2 [完了]ボタン・クリック時の処理を記述したコード(Wizard.aspx) |
[完了]ボタンをクリックしたときに発生するのはFinishButtonClickイベントです。ちなみに、Wizardコントロールではそのほかにも表6のようなイベントが用意されており、これらのイベントを利用することで、ウィザード上の各タイミングでの処理をカスタマイズすることも可能です。
| ||||||||||||||
表6 Wizardコントロールの主要なイベント | ||||||||||||||
ここでは、FinishButtonClickイベント・ハンドラでSqlDataSourceコントロールのInsertメソッドを呼び出し、先ほど設定した挿入コマンドを実行しているわけです。
もっとも、この時点ではまだINSERT命令のプレイス・ホルダに具体的なパラメータが渡されていませんので、Wizardコントロール上に配置された各サーバ・コントロールの値を引き渡す必要があります。この処理を行っているのが、SqlDataSourceコントロールのInsertingイベント・ハンドラです。
Insertingイベント*7は挿入コマンドの実行「直前」に発生するイベントで、主にパラメータ値の検査や加工、セットなどを行うために使用します。
*7 ちなみに、SqlDataSourceコントロールには、ほかにもUpdating/Updated、Deleting/Deleted、Selecting/Selectedイベントが用意されており、それぞれのコマンド実行前後における処理を記述できます。 |
データソース・コントロール(SqlDataSourceコントロール)で定義されたコマンドにアクセスするには、イベント・ハンドラの第2パラメータとして受け取ったSqlDataSourceCommandEventArgsオブジェクトからCommandプロパティを使用します。これによって、データソース・コントロールで定義されたコマンドをDbCommandオブジェクトとして取得できますので、そのParameterプロパティを介して取得したDbParameterCollectionオブジェクトから個々のパラメータにアクセスします。
また、Insertedイベントは挿入コマンドの実行「直後」に発生するイベントで、主に実行結果(影響を受けた行数など)を取得したり、例外発生時の処理を記述したりするためなどに使用します。
ここでは、イベント・ハンドラの第2パラメータとして受け取ったSqlDataSourceStatusEventArgsオブジェクトからExceptionプロパティにアクセスすることで、挿入コマンドの実行によって発生した例外情報(Exceptionオブジェクト)を取得しているわけです。ここではExceptionプロパティの値がNothingでない場合に何らかの例外が発生したものと見なし、以降の処理を実行します。
ExceptionHandledプロパティはデータベースによって発生した例外が処理されたかどうかを示すブール値を表し、SqlDataSourceコントロール上で例外が発生した場合にFalseがセットされます。自前で例外を処理する場合には、本プロパティをTrueに設定しないと、SqlDataSourceコントロールが例外をスローしますので注意してください。
ここでは、ExceptionオブジェクトのMessageプロパティで例外メッセージを取得し、Wizardコントロール上の完了画面に表示します。
以上を理解したら、Wizard.aspxを実際に実行してみましょう。図3のようにウィザード・ページが順番に表示されることが確認できれば成功です。登録成功のメッセージを画面上で確認したら、サーバ・エクスプローラからmembersテーブルに正しくデータが格納されていることも確認してみましょう。
INDEX | ||
Visual Studio 2005でいってみようDBプログラミング | ||
第5回 開発生産性を向上させるASP.NET 2.0のサーバ・コントロール | ||
1.GridView/DetailsViewコントロールで一覧/詳細マルチビューを生成する | ||
2.Wizardコントロールでウィザード形式の入力画面を作成する(1) | ||
3.Wizardコントロールでウィザード形式の入力画面を作成する(2) | ||
4.TreeViewコントロールでツリー・メニューを作成する | ||
「Visual Studio 2005でいってみようDBプログラミング」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|