伝票明細行クラス [VB]

Visual Basic ADO.NET [Community Express]

受注エントリー明細行クラス

受注明細1行分クラスのClsInsertDetailRowは、入力した1行分のデータを明細行リストに追加し、データグリッドビューに表示できるようにするためのクラスです。

明細入力データ管理クラスの実装

受注エントリー画面

ClsInsertDetailRowクラスは、基本クラス(基底クラス)ClsDetailRowBaseを継承したクラスで、明細行追加ボタンを押したときに、入力データをClsInsertDetailRowから明細行リストに追加し、データグリッドビューに表示できるようにするためのクラスです。

これらのクラスに実装したプロパティとデータグリッドビューの列をバインドして、フォームに表示します。

基本クラスClsDetailRowBaseは、MustInheritを付加し、抽象クラスとします。インスタンスは生成できません。

インスタンスは、派生クラスClsInsertDetailRowから生成します。

商品名称・受注単価・受注金額は、データグリッドビューに表示するためだけに使用するので、ReadOnlyプロパティにします。

エラーチェックは、Setプロパティに実装します。エラーがあれば、例外をスローします。

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 sCode As String)
            ' 商品インスタンスの生成
            ' 商品コードエラーチェック(エラー時は例外スロー)
            Dim shohin As New ClsShohin(sCode)
            ' 商品コードを変数メンバーにセット
            shohinCodeValue = sCode
            ' 商品名称を変数メンバーにセット
            shohinMeishoValue = shohin.ShohinMeisho
            ' 商品単価を変数メンバーにセット
            juchuTankaValue = shohin.Tanka
        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

    '=======================================================
    ' 機能:コンストラクタ
    ' 引数:ディテール表に追加する行データ
    ' 戻値:なし
    '=======================================================
    Protected Sub New(ByVal row As DataRow)

       ' 最初に基本クラスのコンストラクタを呼び出す
       MyBase.New()
       ' エラーチェックとデータセット
        ShohinCode = CStr(row("商品コード"))
        JuchuSuryo = CInt(row("受注数量"))

    End Sub

End Class