Format DateTime In DropDown lists (, ASP.NET)

let’s say you retrieve a few dates from your database in this format:

2009-12-16 00:00:00.000
2010-01-20 00:00:00.000
2010-03-03 00:00:00.000

Now it is time to display them in a drop down list, before doing so you want to make sure that you have the right format. You would want to display something like 12/16/2009 in the drop down right?

You have two options:
1. Format the date in SQL first using something like :

select Distinct CONVERT(VARCHAR(10), MyDate  101) as MyDate from Table order by MyDate

Very soon you will find out that SQL does a bad poor job at ordering the list because the ordering happens after the conversion.

2. Use the Prerender event of the Dropdownlist
First the “DataTextFormatString” property does not work with date (stupid right?). The only way i have been able to get the right date is to use the “Prerender” Event of the Dropdown list and Loop through the items and change them on the Fly.

Protected Sub dd_date_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles dd_date.PreRender
Dim i As Integer
Dim MyDateTime As DateTime
For i = 1 To Me.dd_date.Items.Count - 1
 MyDateTime = FormatDateTime(Me.dd_date.Items(i).Text, DateFormat.ShortDate)
 Me.dd_date.Items(i).Text = MyDateTime.ToString("MM/dd/yyyy")
 Me.dd_date.Items(i).Value = MyDateTime.ToString("MM/dd/yyyy")
End Sub

Hopefully that will save some people some time