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

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


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


所以,我的项目在 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 放入数据库?

jeck猫
浏览 222回答 1
1回答

慕哥6287543

我假设你的 DateTimePicker 控件被调用 dataEntrega即使您已更改 DateTimePicker 的显示格式以清除显示的值,它仍然具有您通过Value属性访问的基础 DateTime 值。在您的 中SaveChanges,分配给DataEntregue属性时,您应该检查CheckedDateTimePicker的属性并采取相应的行动。if(dataEntrega.Checked){    DataEntrega = dataEntrega.Value;}else{    DataEntrega = null;}
打开App,查看更多内容
随时随地看视频慕课网APP