0

我的 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
4

3 回答 3

1

DisplayFormat 属性只是一个信息。一些 UI 控件(例如一些 WPF 控件)使用它并尊重它。这只是一个提示。它不会改变整数的存储方式。整数存储为二进制值。它没有固有格式或前导或尾随零(小数在某种程度上具有)。

为了达到您的目标,您必须格式化您在应用程序中制作的字段的每个输出,或者使用尊重 DisplayFormat 属性的 UI 控件。

于 2015-03-27T18:53:06.190 回答
0

首先,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")

或类似的东西。可能最好抽象出您将显示值与存储值分开的意图。

于 2015-03-28T05:49:46.067 回答
0

您可以将值视为字符串。

Dim areaString As String = Strings.Right("000" & area.ToString, 3)
于 2015-03-27T19:32:50.213 回答