C#无法从DateTimePicker中保存数据库中的Null

时间:2018-05-29 13:38:29

标签: c# entity-framework-6 datetimepicker

我的Windows窗体中有一个DateTimePicker,如果用户没有选择任何日期,我需要让它在数据库中保存NULL。

但是,即使我没有选择任何日期(检查为假),数据库中保存的值也是当前日期。

所以,我的项目是在EF6。

这是我的实体属性:

[Display(Name = "Data Entrega")]
[Column(TypeName = "datetime2")]
public DateTime? DataEntregue { get; set; }

这是带有DateTimePicker的表单:

处理程序:

private void dataEntrega_ValueChanged(object sender, EventArgs e)
{
    if (((DateTimePicker)sender).ShowCheckBox == true)
    {
        if (((DateTimePicker)sender).Checked == false)
        {
            ((DateTimePicker)sender).CustomFormat = " ";
            ((DateTimePicker)sender).Format = DateTimePickerFormat.Custom;
        }
        else
        {
            ((DateTimePicker)sender).CustomFormat = "yyyy-MM-dd";
            ((DateTimePicker)sender).Format = DateTimePickerFormat.Custom;
        }
    }
    else
    {
        ((DateTimePicker)sender).CustomFormat = " ";
        ((DateTimePicker)sender).Format = DateTimePickerFormat.Custom;
    }
}

SaveChanges:

DbContext ctx = new DbContext();
Tools tl = new Tools()
{
    DataEntregue = dataEntrega.Value,
    Comentarios = txtComentarios.Text.Trim(),
    CreatedBy = Extensions.UserInfo.CurrentLoggedUser,
    CreatedOn = DateTime.Now
};
ctx.Tools.Add(tl);
ctx.SaveChanges();

任何人都可以帮我弄清楚为什么我不能在数据库中获取NULL?

由于

1 个答案:

答案 0 :(得分:0)

我假设您的DateTimePicker控件名为dataEntrega

即使您已更改DateTimePicker的显示格式以清除显示的值,它仍然具有您通过Value属性访问的基础DateTime值。

SaveChanges中,在分配给DataEntregue属性时,您应该检查DateTimePicker的Checked属性并采取相应的行动。

if(dataEntrega.Checked)
{
    DataEntrega = dataEntrega.Value;
}
else
{
    DataEntrega = null;
}