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

C# Can't save Null in Database from 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;
    }
}

保存更改:

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 导入数据库?

谢谢

我假定您的 DateTimePicker 控件名为 dataEntrega

即使您更改了 DateTimePicker 的显示格式以清除显示的值,它仍然具有您通过 Value 属性.[=16= 访问的基础 DateTime 值]

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

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