受注伝票エントリー 第6回(受注ディテール行クラス)
第78号(2009.11.10発行)
====================================================================
★★ -- VB.NETデータベースプログラミング奮闘記 -- ★★
(VB 2008 Express & SQL Server 2008 Express)
--------------------------------------------------------------------
いつもご購読ありがとうございます。ADO.NETの基本的なサンプルプログラ
ムをお届けします。今後ともよろしくお願い申し上げます。
やさしいVB2008 ADO.NET → https://adonetvb.com/index.html
====================================================================
■■ 受注伝票エントリー 第6回 ■■
フォームから入力した受注データを、受注ヘッダー表と受注ディテール表に
登録するプログラムを作成します。
フォーム → https://adonetvb.com/OrderEntry/index.html
テーブル定義 → https://adonetvb.com/OrderEntry/DB.html
バックナンバー → https://adonetvb.com/MailMagazine/index.html
--------------------------------------------------------------------
■ 受注ディテール行クラス ■
今回は、明細1行分クラスのClsInsertDetailRowを実装します。このクラス
は、明細行追加ボタンを押したときに、入力データをClsInsertDetailRowか
ら明細行リストに追加し、データグリッドビューに表示できるようにするた
めのクラスです。
列スタイルDataPropertyName(前号参照)に、このプロパティ名を設定する
と、データグリッドビューに商品名称や受注単価等の内容を表示できるよう
になります。
ClsInsertDetailRowは、基本クラス(基底クラス)ClsDetailRowBaseを継承
したクラスです。受注番号プロパティを継承クラス、その他のプロパティを
基本クラスに実装します。
ClsDetailRowBaseクラスは、
Public MustInherit Class ClsDetailRowBase
と宣言して、抽象クラスとするので、インスタンスを生成できません。
ClsInsertDetailRowクラスは、
Public Class ClsInsertDetailRow
Inherits ClsDetailRowBase
と宣言して、基本クラスを継承します。インスタンスは、このクラスから生
成します。
商品名称・受注単価・受注金額は、データグリッドビューに表示するだけな
ので、ReadOnlyプロパティにします。
入力データのエラーチェックは、Setプロパティに実装します。
ClsShohinと ClsJuchuDetailIOが未実装なので、このままビルドすると、エ
ラーになります。◆◆行をコメントアウトします。エラー部分は、次号から
実装していきます。
--【プログラムソースリスト:ClsJuchuDetail.vb】---------------------
Option Strict On
Imports System.Text.RegularExpressions
'%%%%%%%%%%%%% 抽象クラス:受注ディテール行クラス %%%%%%%%%%%
Public MustInherit Class ClsDetailRowBase
'--------------------< メンバ:変数 >-------------------
Private shohinCodeValue As String ' 商品コード
Private shohinMeishoValue As String ' 商品名称
Private juchuSuryoValue As Integer ' 受注数量
Private juchuTankaValue As Integer ' 受注単価
'======================================================
' 機能:コンストラクタ
' 引数:なし
'======================================================
Protected Sub New()
' 最初に基本クラスのコンストラクタを呼び出す
MyBase.New()
End Sub
'------------------------------------------------------
' プロパティ:商品コード
'------------------------------------------------------
Public Property ShohinCode() As String
' Getプロパティ
Get
Return shohinCodeValue
End Get
' Setプロパティ
Set(ByVal value As String)
' 【エラーチェック】エラー時は例外をスロー
If Not Regex.IsMatch(value, "^[0-9]+$") Then
' 数字以外は例外をスルー
Throw New ShohinCodeException _
("商品コードに数字以外の文字があります")
Else
' 商品インスタンスの生成
'◆◆Dim shohin As New ClsShohin(value)
' 商品コードをプライベート変数にセット
'◆◆shohinCodeValue = value
' 商品名称をプライベート変数にセット
'◆◆shohinMeishoValue = shohin.ShohinMeisho
' 商品単価をプライベート変数にセット
'◆◆juchuTankaValue = shohin.Tanka
End If
End Set
End Property
'------------------------------------------------------
' プロパティ:商品名称(読取専用)
'------------------------------------------------------
Public ReadOnly Property ShohinMeisho() As String
' Getプロパティ
Get
Return shohinMeishoValue
End Get
End Property
'------------------------------------------------------
' プロパティ:受注数量
'------------------------------------------------------
Public Property JuchuSuryo() As Integer
' Getプロパティ
Get
Return juchuSuryoValue
End Get
' Setプロパティ
Set(ByVal value As Integer)
'【エラーチェック】1から100なら正常
If value >= 0 And value <= 100 Then
juchuSuryoValue = value
Else
Throw New JuchuSuryoException _
("受注数量は1から100を入力してください")
End If
End Set
End Property
'------------------------------------------------------
' プロパティ:受注単価(読取専用)
'------------------------------------------------------
Public ReadOnly Property JuchuTanka() As Integer
' Getプロパティ
Get
Return juchuTankaValue
End Get
End Property
'------------------------------------------------------
' プロパティ:受注金額(読取専用)
'------------------------------------------------------
Public ReadOnly Property JuchuKingaku() As Integer
' Getプロパティ
Get
Return juchuTankaValue * juchuSuryoValue
End Get
End Property
End Class
'%%%%%%%%%%%%%%%%% 受注ディテール追加クラス %%%%%%%%%%%%%%%%%
Public Class ClsInsertDetailRow
Inherits ClsDetailRowBase
'--------------------< メンバ:変数 >-------------------
Private juchuBangoValue As String ' 受注番号
'======================================================
' 機能:コンストラクタ
' 引数:ディテール表に追加する行データ
' 戻値:なし
'======================================================
Public Sub New(ByVal row As DataRow)
' 最初に基本クラスのコンストラクタを呼び出す
MyBase.New()
' エラーチェックとデータセット
ShohinCode = CStr(row("商品コード"))
JuchuSuryo = CInt(row("受注数量"))
End Sub
'------------------------------------------------------
' プロパティ:受注番号
'------------------------------------------------------
Public Property JuchuBango() As String
' Getプロパティ
Get
Return juchuBangoValue
End Get
' Setプロパティ
Set(ByVal value As String)
' 【エラーチェック】
If value.Length = 0 Then
' 未入力はエラー
Throw New JuchuBangoException _
("受注番号を入力してください")
End If
' 数字以外はエラー
If Not Regex.IsMatch(value, "^[0-9]+$") Then
Throw New JuchuBangoException _
("受注番号に数字以外の文字があります")
End If
' 受注ディテール表にアクセス
'◆◆Dim dbIO As New ClsJuchuDetailIO
' 受注番号が受注ディテール表にあればエラー
'◆◆If dbIO.ExistKeyData(value) = True Then
'◆◆ Throw New JuchuBangoException _
'◆◆ ("受注番号は登録済みです")
'◆◆End If
juchuBangoValue = value
End Set
End Property
End Class
--------------------------------------------------------------------
次号:商品クラスClsShohinの実装
====================================================================
VB.NET データベースプログラミング奮闘記
発行者:ウェブ実験室(adonet‾live.jp ‾はあっとマーク)
http://park5.wakwak.com/‾weblab/
--------------------------------------------------------------------
このメールマガジン(マガジンID: 0000128094)は、
インターネットの本屋さん『まぐまぐ』から配信されています。
http://www.mag2.com/
【購読中止の方法】購読の中止は次のホームページからお願い致します。
http://park5.wakwak.com/‾weblab/
http://www.mag2.com/m/0000128094.htm
--------------------------------------------------------------------
このメールマガジン及び「すぐ使えるADO.NET」「やさしいBV2008 ADO.NET」
などのホームページで公開しているソースプログラム・データの利用により
生じた損害等については、発行者は一切責任を負いません。ソースプログラ
ムの再利用は自由です。著作権は発行者が所有します。
このメールマガジン及び「すぐ使えるADO.NET」「やさしいBV2008 ADO.NET」
などホームページに掲載されている会社名・製品名等は、各社の登録商標ま
たは商標です。
====================================================================