Как установить значение по умолчанию DateTime для пустой строки? - PullRequest
2 голосов
/ 07 сентября 2010

У меня есть свойство Raised_Time, это свойство показывает время, когда в ячейке данных создается тревога.Я не хочу ничего показывать в ячейке таблицы данных, когда пользователь создает какую-либо тревогу, он просто отображает пустую ячейку.

Я гуглил в интернете и обнаружил, что значение DateTime по умолчанию можно установить с помощью DateTime.MinValue и будет отображаться MinValue даты и времени i: e "01.01.10001 12:00:00 AM".

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

Я думаю, что в этом случае может быть записан регистратор данных.Я не могу написать datatrigger для этого сценария.Нужен ли также конвертер, который проверяет, установлено ли для DateTime значение DateTime.MinValue оставьте пустую ячейку таблицы данных ??

Пожалуйста, помогите !!

Ответы [ 4 ]

9 голосов
/ 07 сентября 2010

Я бы использовал конвертер для этого, потому что это легко увидеть в будущем.Вот тот, который я использовал для получения строкового значения DateFormat в качестве ConverterParameter.

public class DateTimeFormatConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if ((DateTime)value == DateTime.MinValue)
            return string.Empty;
        else
            return ((DateTime)value).ToString((string)parameter);
    }


    public object ConvertBack(object value, System.Type targetType, object parameter, CultureInfo culture)
    {
        throw new System.NotImplementedException();
    }
}
7 голосов
/ 07 сентября 2010

Я вижу два простых варианта решения этой проблемы:

  1. Вы используете тип данных Nullable DateTime?, так что вы можете сохранить null вместо DateTime.MinValue, если время будильника не установлено.

  2. Вы можете использовать конвертер, вот пример .

3 голосов
/ 07 сентября 2010

Как насчет того, чтобы просто изменить свою собственность для ссылки на приватное поле DateTime, например ::1001*

public string Raised_Time
{
  get
  {
    if(fieldRaisedTime == DateTime.MinValue)
    {
      return string.Empty();
    }
    return DateTime.ToString();
  }
  set
  {
    fieldRaisedTime = DateTime.Parse(value,   System.Globalization.CultureInfo.InvariantCulture);
  }
}
2 голосов
/ 07 сентября 2010

Я использую nullable datetime для этого с методом расширения, например:

 public static string ToStringOrEmpty(this DateTime? dt, string format)
 {
     if (dt == null)
        return string.Empty;

     return dt.Value.ToString(format);
 }
...