我的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?
由于
答案 0 :(得分:0)
我假设您的DateTimePicker控件名为dataEntrega
即使您已更改DateTimePicker的显示格式以清除显示的值,它仍然具有您通过Value
属性访问的基础DateTime值。
在SaveChanges
中,在分配给DataEntregue
属性时,您应该检查DateTimePicker的Checked
属性并采取相应的行动。
if(dataEntrega.Checked)
{
DataEntrega = dataEntrega.Value;
}
else
{
DataEntrega = null;
}