簡體   English   中英

如何在DTO級別填充vb.net中的整數以確保始終為三位數?

[英]How can I pad an integer to make sure it is always three digits in vb.net at the DTO level?

我的DTO中有一個整數字段。 在數據庫中,有些數字存儲為1、2、101等。我想確保在系統中它們始終顯示為三位數,例如001、002。 這是行不通的,我不知道該怎么做...那里有什么想法嗎? 這是我的DTO的片段:

Private mArea As Integer
<Display(name:="Area")> _
<DisplayFormat(DataformatString:="{0:000}")> _
Public Property Area() As Integer
    Get
        Return mArea
    End Get
    Set(ByVal value As Integer)
        mArea = value
    End Set
End Property

DisplayFormat屬性只是一個信息。 一些UI控件(例如某些WPF控件)使用並尊重它。 這只是一個提示。 它不改變整數的存儲方式。 整數存儲為二進制值。 它沒有固有格式,也沒有前導或尾隨零(一定程度上有小數)。

為了實現您的目標,您必須格式化在應用程序中所做的字段的每個輸出,或使用尊重DisplayFormat屬性的UI控件。

您可以將值視為字符串。

Dim areaString As String = Strings.Right("000" & area.ToString, 3)

首先,VB將自動為您創建一個支持字段,因此您應該能夠將現有的屬性聲明簡化為:

<Display(name:="Area"), DisplayFormat(DataformatString:="{0:000}")>
Public Property Area As Integer

如前所述,屬性上的屬性可能適用於容器,也可能不適用於容器,因此可能無法兌現。 我在其他項目中所做的事情是創建模板化的Value類,例如:

Public MustInherit Class Value(Of T)
    Public Overridable Property Value As T
    Public MustOverride ReadOnly Property DisplayValue As String
End Class

Public Class AreaValue
    Inherits Value(Of Integer)

    Public Overrides ReadOnly Property DisplayValue As String
        Get
            Return Format(Value, "000")
        End Get
    End Property
End Class

然后,您將擁有完全的控制權來區分顯示的內容和存儲的內容。

否則,您可以在顯示“區域”的每個位置前面加上以下命令:

Format(Area,"000")

或類似的東西。 最好是抽象出將顯示值與存儲值分開的意圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM