Asp.net gridview按日期排序
本文关键字:日期 排序 gridview net Asp | 更新日期: 2023-09-27 18:17:26
我有一个gridview与AllowSorting="True"
,但我想有一个自定义排序只有一列,所以它可以按日期排序。
当前被排序为字符串,因此排序不正确。
数据来自SQL DB。有没有一种方法可以对日期列进行SQL排序?
嘿,对于自定义排序,您需要在aspx页面上定义Sort Expression
,然后需要在.cs
页面上定义属性,以保持当前选择,如ASC/DESC,并在OnSorting
事件上进行编码。我把它们一一编码。
ASPX CODE .
<asp:TemplateField HeaderText="DateTest" SortExpression="DateTest">
cs代码。
定义保存当前选择项的enum
/// <summary>
/// Sort grid header.
/// </summary>
enum enmSortHeader
{
Asc = 0,
Desc = 1
}
定义保存当前选择的属性。
private enmSortHeader SortDateTest
{
get
{
if (ViewState["DateTest"] == null)
return enmSortHeader.Asc;
return
(enmSortHeader)ViewState["DateTest"];
}
set
{
ViewState["DateTest"] = value;
}
}
On Sorting Event.
protected void gvDetails_OnSorting(object sender, GridViewSortEventArgs e)
{
if (e.SortExpression == "DateTest")
{
if (SortDateTest== enmSortHeader.Asc)
{
var sorted = from m in SessionClass.BindDetailsGrid orderby m.Date ascending select m;
SessionClass.BindThoughtDetailsGrid = sorted.ToList();
SortTheme = enmSortHeader.Desc;
}
else
{
var sorted = from m in SessionClass.BindThoughtDetailsGrid orderby m.Date descending select m;
SessionClass.BindDetailsGrid = sorted.ToList();
SortTheme = enmSortHeader.Asc;
}
}
}
希望对你有帮助。
您可以为要排序的数据列指定Sort Expression属性
eg: SortExpression="Date"
其中Date是要排序的Data列的名称
当你的日期是字符串格式时,你应该将其转换为DateTime,然后你就可以对日期进行排序。如果您使用数据表绑定网格视图,首先将其转换为DataTime
dt.Columns.Add("DateTime", System.Type.GetType("System.DateTime"));
只是想纠正@Anuj的答案,这对我来说很有用。在DataTable
对象的定义中,在添加列时需要指定对象的类型,如下所示:
DataTable dataTable = new DataTable("Log");
dataTable.Columns.Add("Start", typeof(DateTime));
dataTable.Columns.Add("End", typeof (DateTime));
然后,在你的ASP页面后面的代码中,使用这个:
private string SortField
{
get { return (string) ViewState["SortPropertyName"]; }
set { ViewState["SortPropertyName"] = value; }
}
private string SortDirection
{
get { return (string) ViewState["SortDirection"]; }
set { ViewState["SortDirection"] = value; }
}
在SortCommand方法中:
if (SortField.Equals(e_.SortExpression))
SortDirection = SortDirection == "asc" ? "desc" : "asc";
else
{
SortDirection = "asc";
SortField = e_.SortExpression;
}