2012-12-11 56 views
2

我使用ASP.NET和C#。這是我的代碼。如何在gridview中對日期列進行排序?

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" /> 
    

此列的數據類型是日期。

如何做到這一點?我做錯了嗎?

+0

在您的代碼「30/11/2012」中,其他日期被視爲字符串,只有字符串排序正在發生。 – sajanyamaha

+0

謝謝..我知道,但我不知道爲什麼字符串排序正在發生。我宣佈這隻作爲日期類型..你可以給我任何提示? – Giri

回答

6

有兩個選項

1.To排序在SQL級別,這是最好的和適當的方法,結合所產生的結果集在gridview中。

2.要將DataTable與查詢輸出綁定並在數據表上運行排序,然後將其綁定到gridview。 請記住將數據類型添加到數據表列accTable.Columns.Add("Date",typeof(DateTime));

+0

是啊..我通過第一種方法綁定,如直接綁定結果集grid.any有關爲什麼字符串排序正在發生的想法? – Giri

+0

第一種方法意思就像'select * from recentLogin order by the_date',之後你只需要綁定它,爲什麼你要重新排序呢? – sajanyamaha

+0

謝謝..我的東西很複雜..現在它工作.. – Giri

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> 
+0

就像我在帖子中指定的那樣,它是日期的類型。 – Giri

+0

您是否嘗試將BoundField更改爲TemplateField? – GeorgesD

+0

謝謝..但它沒有像以前一樣工作。是我的代碼隱藏是好的? – Giri

相關問題