如何在DB值为空时显示空白日期选择器

本文关键字:显示 空白 日期 选择器 DB | 更新日期: 2023-09-27 18:15:37

我在客户对象上有一个DateTime Birthday的SQL DB列。数据库允许该字段为空,但偶尔我们的用户用1/1/1900填充数据(来自另一个系统)。

我想让我的DatePicker字段在数据库中的日期为null或DateTime.Parse("1900-01-01 00:00:00.000")时不显示任何内容。(它不必是完全空白,但可以有DatePicker字段的标准默认值" / / "

我一直在尝试这个:

dtBirthday.Value = customer.Birthday.HasValue ? customer.CustomerOptions.Birthday.Value : DateTime.Parse("1900-01-01 00:00:00.000");

这对于空生日工作得相当好,但不允许customer.Birthday中的日期实际上是DateTime.Parse("1900-01-01 00:00:00.000")

事实上,我谷歌了一下,并尝试使用

            var nullDate = DateTime.Parse("1900-01-01 00:00:00.000");
            if (customer.Birthday.Value == nullDate)
            {
                dtBirthday.Format = eDateTimePickerFormat.Custom;
                dtBirthday.CustomFormat = " ";
                dtBirthday.Value = DateTime.FromOADate(0);
                dtBirthday.Enabled = true;
            }
            else
            {
                dtBirthday.Format = eDateTimePickerFormat.Custom;
                dtBirthday.CustomFormat = "M/d/yyyy";
                dtBirthday.Value = customer.Birthday.Value;
                dtBirthday.Enabled = true;
            }
            //dtBirthday.Value = customer.Birthday.HasValue ? customer.Birthday.Value : DateTime.Parse("1900-01-01 00:00:00.000");
            if (customer.Anniversary.Value == nullDate)
            {
                dtAnniv.Format = eDateTimePickerFormat.Custom;
                dtAnniv.CustomFormat = " ";
                dtAnniv.Value = DateTime.FromOADate(0);
                dtAnniv.Enabled = true;
            }
            else
            {
                dtAnniv.Format = eDateTimePickerFormat.Custom;
                dtAnniv.CustomFormat = "MM/dd/yyyy";
                dtAnniv.Value = customer.Anniversary.Value;
                dtAnniv.Enabled = true;
            }
            //dtAnniv.Value = customer.Anniversary.HasValue ? customer.Anniversary.Value : DateTime.Parse("1900-01-01 00:00:00.000");

它做的正是我想要的,除了空字段是完全禁用的,即使我已经特别设置它们为enabled=true。

如何在DB值为空时显示空白日期选择器

如果我正确地阅读了您的问题,我认为您希望文本字段在生日实际上为空时为空。为什么不直接用一个空字符串填充它呢:

txtBirthday.Value = 
    customer.Birthday.HasValue ? 
    customer.CustomerOptions.Birthday.Value.ToString() : 
    string.Empty;

在尝试了几十种不同的方法之后,没有一种方法真正达到了我的目的,我突然想到我可以直接不设置的值。

var nullDate = DateTime.Parse("1900-01-01 00:00:00.000");
if (customer.CustomerOptions.Birthday.HasValue && customer.CustomerOptions.Birthday.Value != nullDate)
{
    dtBirthday.Value = customer.CustomerOptions.Birthday.Value;
}
if (customer.CustomerOptions.Anniversary.HasValue && customer.CustomerOptions.Anniversary.Value != nullDate)
{
    dtAnniv.Value = customer.CustomerOptions.Anniversary.Value;
}