如何在gridview中对日期列进行排序?

时间:2012-12-11 09:59:30

标签: c# asp.net

我正在使用ASP.NET和C#。这是我的代码。

    private const string ASCENDING = "ASC"; 
    private const string DESCENDING = "DESC";
    public SortDirection GridViewSortDirection 
    {     
        get     
        {         
            if (ViewState["sortDirection"] == null)             
                ViewState["sortDirection"] = SortDirection.Ascending;          
            return (SortDirection) ViewState["sortDirection"];                     
        }     
        set { ViewState["sortDirection"] = value; }  
    }

    public string SortExpression
    {
        get
        {
            if (ViewState["sortExpression"] == null)
                ViewState["sortExpression"] = "JobNumber";
            return ViewState["sortExpression"] as string;
        }
        set { ViewState["sortExpression"] = value; }
    }
    protected void OnSorting(object sender, GridViewSortEventArgs e)
    {
            SortExpression = e.SortExpression;
            if (GridViewSortDirection == SortDirection.Ascending)
            {
                GridViewSortDirection = SortDirection.Descending;
            }
            else
            {
                GridViewSortDirection = SortDirection.Ascending;
            }
            BindGrid();
    }

我正在为所有列应用排序并且正常工作。但是对于日期列,它就像这个顺序(dd / mm / yyyy)。

  • 30/11/2012
  • 2012年10月12日
  • 2012年9月10日

    <asp:BoundField DataField="ReportedDate" HeaderText="Reported Date" SortExpression="ReportedDate" DataFormatString="{0:DD/MM/YYYY}" HtmlEncode="false" />
    

此列的数据类型为date。

怎么做?我做错了吗?

2 个答案:

答案 0 :(得分:6)

有两个选项

1.要在SQL Level中排序,这是最好和最合适的方法,将结果结果集绑定到gridview。

2.将DataTable与查询输出绑定并对数据表运行排序,然后将其绑定到gridview。  请记住将数据类型添加到数据表列accTable.Columns.Add("Date",typeof(DateTime));

答案 1 :(得分:1)

数据库中此列的数据类型是什么?它似乎就像一个字符串字段而不是DateTime字段。如果是这种情况,您需要先修复数据类型,然后才能获得正确的排序顺序,而无需更改gridview上的任何内容。

尝试更改

<asp:BoundField DataField="ReportedDate" HeaderText="Reported Date" SortExpression="ReportedDate" DataFormatString="{0:DD/MM/YYYY}" HtmlEncode="false" />

<asp:TemplateField SortExpression="ReportedDate">
    <ItemTemplate>
            <asp:label id="lblDate" runat="server" text='<%# Eval("ReportedDate", "{0:DD/MM/YYYY}") %>' />
    </ItemTemplate></asp:TemplateField>