2

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

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

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

此列的数据类型是日期。

怎么做?我做错了吗?

4

2 回答 2

6

有两种选择

1.在SQL级别排序,这是最好的和正确的方法,将结果集绑定到gridview。

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

于 2012-12-11T10:23:46.800 回答
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>
于 2012-12-11T10:04:24.830 回答