2015-03-27 3 views
0

У меня есть поле в моем DTO, которое является целым числом. В базе данных есть несколько чисел, хранящихся как 1, 2, 101 и т. Д. Я хочу убедиться, что в системе они всегда отображаются как три цифры, поэтому 001, 002, например. Это не работает, и я не могу понять, как это сделать ... любые идеи? Вот фрагмент из моего DTO:Как я могу поместить целое число, чтобы убедиться, что он всегда три цифры в vb.net на уровне 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 
+0

Как вы их видите? Если вы используете TextBoxFor, вы можете посмотреть в Редактор/Дисплей. –

+0

Учитывая, что вы хотите отформатировать его определенным образом, это заставляет меня задаться вопросом, действительно ли это целое число. Можете ли вы увеличивать/добавлять/вычитать/умножать/делить его? Если нет, на самом деле это строка с небольшой кодировкой. – Aron

+0

Возможный дубликат [DisplayFormatAttribute не работает] (http://stackoverflow.com/questions/6536836/displayformatattribute-not-working) –

ответ

1

Атрибут DisplayFormat - это всего лишь информация. Некоторые элементы управления пользовательским интерфейсом (например, некоторые элементы управления WPF) используют его и уважают. Это всего лишь намек. Он не меняется, как целое число хранится. Целое число сохраняется как двоичное значение. Он не имеет неотъемлемого формата или ведущих или конечных нулей (в десятичной доле).

Чтобы достичь своей цели, вы должны форматировать каждый вывод поля, которое вы создаете в своем приложении, или использовать элементы управления пользовательским интерфейсом, которые уважают атрибут DisplayFormat.

0

Вы можете рассматривать значение как строку.

Dim areaString As String = Strings.Right("000" & area.ToString, 3) 
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") 

Или что-то подобное. Наверное, лучше всего абстрагировать ваше намерение отделить отображаемые значения от сохраненных значений.