While working on a VB.Net form to query a database that includes an optional date range query, I decided I wanted to display a datetimepicker with a blank value by default and then, if the user sets a date show the date. By default, a datetimepicker can not have a Null date, so I went a’Googling and found this post, .NET Reference: Setting the DateTimePicker to a Blank Value ,that had exactly the technique I wanted.
Basically, I set the datetimepicker’s CustomFormat to a space (” “) when I want it to be Null and then when the user makes a selection, set the custom format to the date format I wanted to display. This is the sample code I found:
Private Sub ToDateField_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles ToDateField.ValueChanged Me.ToDateField.Format = Windows.Forms.DateTimePickerFormat.Custom Me.ToDateField.CustomFormat = "M/dd/yyyy" End Sub
To let the user delete the date they entered, I add this subroutine that handles the KeyDown event for the datetimepicker. If the user hits delete or backspace, I set the format back to my null CustomFormat.
Private Sub ClearDates_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) _ Handles ToDateField.KeyDown If (e.KeyCode = Windows.Forms.Keys.Delete) Or (e.KeyCode = Windows.Forms.Keys.Back) Then Dim mDateTimePicker As Windows.Forms.DateTimePicker mDateTimePicker = TryCast(sender, Windows.Forms.DateTimePicker) If Not (mDateTimePicker Is Nothing) Then mDateTimePicker.CustomFormat = " " End If End If End Sub
When building my SQL statement, I check the .CustomFormat property to determine whether or not to include a condition for the data:
If Not (Me.ToDateField.CustomFormat = " ") Then 'Code here to add to my SQL statement End If