在gridview中排序日期列

本文关键字:日期 排序 gridview | 更新日期: 2023-09-27 18:11:14

我使用girdview来显示搜索结果并在其中实现排序功能。但它不适用于显示日期的列。我以不同的格式显示日期。对于今天的日期,只显示时间,如(10:00 PM或08:45 am),对于今年的任何日期显示,如(APR 22,DEC 15,JAN 30),其他年份以这种格式显示(dd/mm/yyyy)。下面是代码:

<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();

在gridview中排序日期列

我也这么认为,因为你在Eval中使用了这个代码:

Convert.ToDateTime(Eval("CreatedOnDate"))

你能改变你的模型使CreatedOnDate实际上是一个DateTime吗?您仍然可以使用不同格式的ToString,但是可排序的数据将是DateTime,因此可以正确排序。您的模型可能看起来像这样:

class MyModel
{
  public DateTime CreatedOnDate { get; set; } // DateTime instead of string
}

排序机制根据类型的IComparable实现(stringDateTime或其他)自动正确排序。