我正在使用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年9月10日
<asp:BoundField DataField="ReportedDate" HeaderText="Reported Date" SortExpression="ReportedDate" DataFormatString="{0:DD/MM/YYYY}" HtmlEncode="false" />
此列的数据类型为date。
怎么做?我做错了吗?
答案 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>