2013-04-29 7 views
0

Я использую girdview для отображения результатов поиска и реализации функций сортировки в нем. Но он не работает для столбца, отображающего дату. Я показываю дату в другом формате. Для сегодняшней даты просто время отображения (10:00 или 08:45), для любой даты в текущем году, например, (APR 22, DEC 15, JAN 30), а для других лет отображается в этом формате (дд/мм/гггг). Ниже приводится код для этого.столбец сортировки в gridview

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

Ваша проблема еще в том, чтобы ответить, попробуйте следующие блоги: http://stackoverflow.com/questions/138412/how-to-sort-columns-in-an-asp-net-gridview-if-using-a- custom-datasource, http://www.codeproject.com/Questions/448965/How-to-Sort-a-single-Column-in-Asp-net-Gridview – Elyor

ответ

0

Я тоже так думаю, что вы используете этот код в Eval:

Convert.ToDateTime(Eval("CreatedOnDate")) 

Не могли бы вы изменить модель так, что CreatedOnDate фактически DateTime ? Вы все равно можете использовать ToString с различными форматами, но отсортированные данные будут DateTime и поэтому будут отсортированы надлежащим образом. Ваша модель могла выглядеть следующим образом:

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

Механизм сортировки автоматически сортирует правильно в соответствии с IComparable реализации типа (string или DateTime или любой другой).

+0

Спасибо за ваш быстрый ответ. Я постараюсь и позволю вам знаете – samiaj

+0

Можете ли вы изменить мой код соответственно – samiaj

+0

@sami Вам необходимо изменить свою базовую модель, а не разметку. Сортировка выполняется автоматически. См. Мой отредактированный ответ. –