【问题标题】:sort date column in gridview在gridview中对日期列进行排序
【发布时间】:2013-04-29 10:42:49
【问题描述】:

我正在使用 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();

【问题讨论】:

标签: c# asp.net


【解决方案1】:

我也这么认为,因为您在 Eval 中使用此代码:

Convert.ToDateTime(Eval("CreatedOnDate"))

您能否更改您的模型,使CreatedOnDate 实际上是DateTime?您仍然可以使用不同格式的ToString,但可排序的数据将是DateTime,因此可以正确排序。您的模型可能如下所示:

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

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

【讨论】:

  • 感谢您的快速回复。我会尽力让您知道
  • @sami 您需要更改底层模型,而不是标记。排序是自动完成的。请参阅我编辑的答案。
  • 对不起。我没有得到实现这个的逻辑。在我的 aspx.cs 页面中,我只是绑定数据源。这是 that.dvSortedView.Sort = e.SortExpression + " " + getSortDirectionString(); 的代码ViewState["sortExpression"] = e.SortExpression; grdSearchResults.DataSource = dvSortedView; grdSearchResults.DataBind();
  • @sami 您必须更改 数据源 而不是标记。请为我们发布您的数据源对象,以便我们提出更改建议。
  • ... 或 SQL 语句或任何为您提供数据视图的东西 ;)
猜你喜欢
  • 2012-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-25
  • 2014-05-20
  • 2012-12-08
  • 1970-01-01
  • 2014-07-06
相关资源
最近更新 更多