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

时间:2015-10-02 14:59:15

标签: c# winforms datepicker

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

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

我一直在尝试这个:

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

对于null生日而言效果相当不错,但不允许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。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

在尝试了几十种不同的方法后,其中没有一种方法真正做到我想要的,我突然发现我可以没有设置值

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;
}