解説

実例で学ぶASP.NETプログラミング

第13回 オートマチックな情報確認画面の構築

小田原 貴樹(うりゅう)
2004/06/12

注文情報格納にかかわるDataSetオブジェクトを準備する

 ここまで「注文情報」とひとくくりにしているが、データベースのテーブルに細分化した場合には、「顧客情報」は顧客テーブル、「売上伝票情報」は売上伝票テーブル、「売上明細情報」は売上明細テーブルという3つのテーブルに情報を格納する必要がある。このうち、売上明細情報については買い物かご機能を構築する際に「UMSET」というDataSetオブジェクトを作成しているので、ここでは顧客情報と売上伝票情報を格納するDataSetオブジェクトを作成する。

 まず、顧客テーブルからOleDbDataAdapterオブジェクト「CUADP」を作成し、売上伝票テーブルからOleDbDataAdapterオブジェクト「UDADP」を作成してほしい。後はそれぞれのOleDbDataAdapterオブジェクトから、顧客情報を格納するためのDataSetオブジェクト「CUSET」と売上伝票情報を格納するためのDataSetオブジェクト「UDSET」を作成する。DataSetの作成方法について忘れてしまった場合には、連載第3回のOleDbDataAdapterオブジェクトの作成(その3)の項を参照してほしい。

 それぞれのDataSetオブジェクトが作成できたら、データを取得・更新するメソッドの作成を行おう。コンポーネント・クラス(CORE.VB)をIDEのコード・ビューで開いて、DATACONクラスのコードの中に以下のコードを追加してほしい。

Public Sub FDCU(ByVal DSET As CUSET)
  CUADP.Fill(DSET)
End Sub

Public Sub UDCU(ByVal DSET As CUSET)
  CUADP.Update(DSET)
End Sub

Public Sub UDUD(ByVal DSET As UDSET)
  UDADP.Update(DSET)
End Sub

Public Sub UDUM(ByVal DSET As UMSET)
  UMADP.Update(DSET)
End Sub

 上から順に「顧客情報の取得」「顧客情報の更新」「売上伝票情報の更新」「売上明細情報の更新」となっている。コード内容の詳細については、連載第3回のデータセットを構成する各種オブジェクトの項を参照してもらいたい。ここまでの作業で、注文情報確認画面の構築に必要となるDataSetオブジェクトの準備は完了した。

 それでは、入力された注文情報を格納するためのコーディングを行っていこう。

入力された注文情報を一時的に格納する機能の実装

 注文情報入力画面で、ユーザーが情報を入力して[入力内容の確認]ボタンを押した際の処理をコーディングしよう。

 前回作成したREG.ASPXのコードビハインド・ファイルを開いて、Check_ServerClickイベントのコードとして、次のコードを記述してほしい。

01: If Me.IsValid = True Then
02:   Dim CSET As New CUSET
03:   Dim CVIEW As New DataView
04:   CVIEW.Table = CSET.Tables("顧客")
05:   Session("CVIEW") = CVIEW
06:
07:   Dim drv As DataRowView = _
08:     Session("CVIEW").AddNew()
09:   drv.BeginEdit()
10:   drv("氏名") = NAME.Text
11:   drv("EMAIL") = EMAIL.Text
12:   drv("郵便番号") = YUBIN.Text
13:   drv("都道府県") = TKEN.Text
14:   drv("市区町村") = TSIKU.Text
15:   drv("番地") = TADDR.Text
16:   drv("電話番号") = TEL.Text
17:   drv.EndEdit()
18:
19:   Dim USET As New UDSET
20:   Dim UDVIEW As New DataView
21:   UDVIEW.Table = USET.Tables(0)
22:   Session("UDVIEW") = UDVIEW
23:   Dim UDRV As DataRowView = _
24:     Session("UDVIEW").AddNew()
25:   UDRV.BeginEdit()
26:
27:   If OARL.SelectedItem.Value = 0 Then
28:     UDRV("配送先氏名") = NAME.Text
29:     UDRV("配送先郵便番号") = YUBIN.Text
30:     UDRV("配送先住所") = _
31:       TKEN.Text & TSIKU.Text & TADDR.Text
32:     UDRV("配送先電話番号") = TEL.Text
33:   Else
34:     UDRV("配送先氏名") = NNAME.Text
35:     UDRV("配送先郵便番号") = NYUBIN.Text
36:     UDRV("配送先住所") =
37:       NKEN.Text & NSIKU.Text & NADDR.Text
38:     UDRV("配送先電話番号") = NTEL.Text
39:   End If
40:
41:   UDRV("顧客ID") = Session("CVIEW")(0)("ID")
42:   UDRV.EndEdit()
43:
44:   Server.Transfer("REGVIEW.ASPX")
45: End If
注文情報入力画面で[入力内容の確認]ボタンが押されたときの処理
前回で作成した注文情報入力画面であるREG.ASPXのコードビハインド・ファイルで、Check_ServerClickイベントのコードとして記述する。

 長いコードになってしまっているが、コード内容そのものは単純なので、ブロックごとにざっと解説していこう。

 1行目の「Me.IsValid」については前回も解説したが、ページ内のすべての入力チェックがOKであるかどうかを判定するためのコードだ。入力チェックが1つでもNGである状態で、情報を格納しても意味がないため、エントリ系の画面に入力チェックの機能を実装した際には、この構文はほぼ必ず利用されることになる。

 2行目〜5行目は、先ほど作成した顧客情報のデータセット「CUSET」のインスタンスを生成し、それをデータビューに対して割り当て、最後にセッション変数「CVIEW」に格納している。これは第9回ユーザーが買い物かご格納ボタンを押した際のイベント処理を実装するの項で、売上明細情報に対して行った処理と同様のものだ。まだこの段階では、ユーザーの購入が確定的なものかどうかは判断できないので、データベースに実際に格納するよりも、同じ構造を持ったセッション変数の中に格納する方が効率的だ。こうしておけば、ユーザーが購入をやめてしまった場合でも、データベース内に余計なレコードが増えてしまうことはない。

 7行目〜17行目で、作成したセッション変数「CVIEW」に新しい行を追加し、注文情報入力画面で入力された情報のうち、顧客情報にかかわるものを格納していっている。データビューに限らず、内容を編集/追加する場合には、BeginEditメソッドで開始し、EndEditメソッドで終了するのが基本だ。

 19行目〜25行目は、先ほど顧客情報に対して行った処理を、今度は売上伝票情報に対して行っている。

 27行目〜39行目で、売上伝票情報にかかわるものを格納している。注文情報入力画面で、ユーザーが配送先を別に入力しているかどうかによって、売上伝票テーブル内の配送先に格納する情報は変化する。ユーザーが配送先を新しく入力していない場合には、28行目〜32行目のように顧客情報に格納したものとほぼ同様の内容を格納する。配送先を別に入力している場合には、34行目〜38行目のように別に入力された内容を格納する。

 41行目と42行目は、顧客情報と売上伝票情報を関連付けるために、売上伝票テーブル内の列「顧客ID」に先ほど顧客情報を格納したセッション変数「CVIEW」の列「ID」を割り当てている。顧客情報をセッション変数内に格納している以上、レコードは先ほど追加したものだけとなるので、常に情報は1行目に存在すると考えればよい。

 そして44行目で、ここまでの処理で入力された情報の一時的な格納は完了したので、今回作成している注文情報確認画面へと遷移させている。

 これで注文情報入力画面に、ユーザーが入力した情報をセッション変数の中に格納できるようになった。それでは注文情報確認画面に戻って格納した情報を表示するコーディングを行っていこう。


 INDEX
  実例で学ぶASP.NETプログラミング
  第13回 オートマチックな情報確認画面の構築
    1.注文情報確認画面のデザイン
  2.注文情報を一時的に格納する機能の実装
    3.画面表示とクッキー利用の実装
    4.注文確定処理の実装
    5.ASP.NETでのメール送信の実装

インデックス・ページヘ  「解説 :実例で学ぶASP.NETプログラミング」


Insider.NET フォーラム 新着記事
  • 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間