我正在使用girdview显示搜索结果并在其中实现了排序功能。但它不适用于显示日期的列。我正在以不同的格式显示日期。今天的日期只显示时间(晚上10点)或者08:45 AM),对于今年的任何日期显示(APR 22,DEC 15,JAN 30)以及其他年份的显示格式(dd / mm / yyyy).Below是此代码。
<asp:TemplateField HeaderText="CREATED DATE" SortExpression="CreatedOnDate" ItemStyle-Width="150" ItemStyle-Font-Bold="false" ItemStyle-Font-Size="Larger" HeaderStyle-HorizontalAlign="Left" HeaderStyle-VerticalAlign="Top" ItemStyle-HorizontalAlign="Left" ItemStyle-VerticalAlign="Top" >
<HeaderTemplate >
<asp:LinkButton ID="LinkButton4" runat="server" Text="CREATED DATE" CommandName="Sort" style="text-decoration:none" CommandArgument="CreatedOnDate" ></asp:LinkButton>
</HeaderTemplate>
<ItemTemplate>
<asp:Label runat="server" Text='<%# Convert.ToDateTime(Eval("CreatedOnDate")).ToString("yyyy")==DateTime.Today.ToString("yyyy")?(Convert.ToDateTime(Eval("CreatedOnDate")).ToString("MMMM dd") == DateTime.Today.ToString("MMMM dd") ? Convert.ToDateTime(Eval("CreatedOnDate")).ToString("hh:mm t.\\M.") : Convert.ToDateTime(Eval("CreatedOnDate")).ToString("MMM dd")):Convert.ToDateTime(Eval("CreatedOnDate")).ToString("dd/MM/yyyy") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
我认为这里的日期是作为字符串处理的。任何人都可以帮我排序这个专栏。这是背后的代码:
dvSortedView.Sort = e.SortExpression + " " + getSortDirectionString();
ViewState["sortExpression"] = e.SortExpression;
grdSearchResults.DataSource = dvSortedView;
grdSearchResults.DataBind();
答案 0 :(得分:0)
我也这么认为,因为您在Eval
中使用了此代码:
Convert.ToDateTime(Eval("CreatedOnDate"))
你可以改变你的模型,以便CreatedOnDate
实际上是DateTime
吗?您仍然可以使用不同格式的ToString
,但可排序数据将是DateTime
,因此可以正确排序。您的模型可能如下所示:
class MyModel
{
public DateTime CreatedOnDate { get; set; } // DateTime instead of string
}
排序机制会根据类型IComparable
或string
或其他任何内容的DateTime
实现自动排序。