Как кто-то может обрабатывать дату и время по умолчанию

У меня есть DAL, где я преобразую нулевое значение базы данных в их эквивалентное представление в C#. Например:

NULL for Numeric = 0
NULL for String = String.Empty
NULL for DateTime = "1/1/0001" (i.e. DateTime.MinValue)

На сегодняшний день проблема заключается в уровне представления, особенно в GridViews. Вы не можете показать 1/1/01 пользователям.

Что я делал, это проверял if myDate.Year=1 or myDate.Year < AcceptedDate и отображать пустую строку, но, кажется, дополнительные усилия в отличие от других типов

Пожалуйста, открыт для лучшего подхода. Благодарю.

6 ответов

Решение

Использование Nullable тип данных для хранения нулевого значения.

DateTime? value = null;
int? myNullableInt = 1;
value = DateTime.Now;

Как проверить, имеет ли переменная значение или ноль

if (value!=null)

Строковое значение может хранить ноль, поэтому нет никакого другого типа данных для строки, чтобы сохранить ноль.

string var;
if (var == null)

или же

if (String.IsNullOrEmpty(var))

Вы также можете использовать константу DateTime.MinValue.

http://msdn.microsoft.com/en-us/library/system.datetime.minvalue.aspx

Ваши условия будут:

if (myDate == DateTime.MinValue)

Я не думаю, что у вас есть большой выбор, кроме как сделать чек, как вы, и отобразить соответственно. Обнуляемый тип может облегчить вам жизнь. В зависимости от ваших данных, даже цифра должна обрабатываться таким образом. DBNull!= 0.

Ты можешь использовать NullableDateTimeтак ты вернешься DateTime? вместо DateTime от вашего DAL. Таким образом, вы можете проверить, является ли возвращаемое значение нулевым.

DateTime? dateTime = null;

Вы можете использовать Nullable DateTime, как предложили другие, или использовать этот трюк: (для предотвращения недопустимых значений по умолчанию.)

// If dateTime has not been initialize, initialize to Now
// (or to any other legal inital values)
dateTime = ((dateTime != new DateTime()) ? dateTime : DateTime.Now);

Этот трюк полезен, если вам нужно использовать ненулевой DateTime и хотите указать значение по умолчанию, если его нет. (Например, у вас есть необнуляемый столбец DateTime в БД, и вы хотите установить значение, только если строка новая.)

Как уже упоминалось, вы могли бы использовать System::Nullable<DateTime>,

Другой подход, который я видел, это использовать стандарт DateTime и просто используйте специальное значение, такое как DateTime.MinValue, Это полезно, если вам нужно соблюдать существующие типы интерфейса и не можете изменить DateTime к Nullable<DateTime>,

Другие вопросы по тегам