I assume that you are setting AutoGenerateColumns to false in the gridview.
You can have two columns.
1.
<asp:boundfield datafield="Date" dataformatstring="{0:dd MMMM yyyy}" headertext="Date" xmlns:asp="#unknown" />
2.
<asp:templatefield xmlns:asp="#unknown">
<HeaderTemplate>
Date</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblDate" runat="server" ></asp:Label></ItemTemplate>
</asp:TemplateField></asp:templatefield>
In the DataBound event of the gridview run a foreach loop for all rows, make the first column's visible = false, assign the value to template column using the value bound to the first column.
Alternatively see if following single column work for you.
<asp:templatefield xmlns:asp="#unknown">
<ItemTemplate>
<%# string.Format("{0:dd MMMM yyyy}",Eval("Date"))%>
</ItemTemplate>
</asp:TemplateField></asp:templatefield>