Set DateTimePicker value to be null
Solution 1:
I think the best solution is to use the build-in checkbox that tell the user if a value is specified or not.
Set the control property ShowCheckBox = true
When you bind the value to it do something like
if (value == DateTime.MinValue) {
datePicker.Checked = false;
} else {
datePicker.Checked = true;
datePicker.Value = value;
}
When reading back the value check the Checked
property.
If you don't like the displayed value when it's unchecked, you can combine that with the other suggestions.
if (!datePicker.Checked) {
// hide date value since it's not set
datePicker.CustomFormat = " ";
datePicker.Format = DateTimePickerFormat.Custom;
} else {
datePicker.CustomFormat = null;
datePicker.Format = DateTimePickerFormat.Long; // set the date format you want.
}
Solution 2:
I know this is an older post, but others might still find this useful. It is fairly elegant and concise. I used this with a .Net 4.0 DateTimePicker but earlier versions should work with minimal tweaking. It leverages MinDate and Checked.
// Use ValueChanged to decide if the value should be displayed:
dateTimePicker1.ValueChanged += (s, e) => { dateTimePicker1.CustomFormat = (dateTimePicker1.Checked && dateTimePicker1.Value != dateTimePicker1.MinDate) ? "MM/dd/yyyy" : " "; };
//When getting the value back out, use something like the following:
DateTime? dt = (dateTimePicker1.Checked && dateTimePicker1.Value != dateTimePicker1.MinDate) ? (DateTime?) dateTimePicker1.Value : null;
// or
DateTime dt2 = (dateTimePicker1.Checked && dateTimePicker1.Value != dateTimePicker1.MinDate) ? dateTimePicker1.Value : DateTime.MinValue;
Solution 3:
To display the null value in DateTimePicker
control, Make the following changes in the Designer.cs
file:
this.DateTimePicker.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
this.DateTimePicker.CustomFormat = " ";
When user selects a date, code-in the ValueChanged
property of the control and make the format according to your needs. This will display the date in the control.
The above one only display's the control as blank in UI, however the default value will still be the current date.
If you want to set/initialize the value as null or empty string:
- declare a temporary string variable say temp
temp = DateTimePicker.CustomFormat.ToString();
- check whether temp is an empty string. If so handle as you like.
This is the easiest workaround I found.