Asp.net gridview按日期排序

本文关键字:日期 排序 gridview net Asp | 更新日期: 2023-09-27 18:17:26

我有一个gridview与AllowSorting="True",但我想有一个自定义排序只有一列,所以它可以按日期排序。

当前被排序为字符串,因此排序不正确。

数据来自SQL DB。有没有一种方法可以对日期列进行SQL排序?

Asp.net gridview按日期排序

嘿,对于自定义排序,您需要在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;
}