【问题标题】:asp.net gridview sort by dateasp.net gridview 按日期排序
【发布时间】:2013-06-07 10:20:58
【问题描述】:

我有一个带有AllowSorting="True" 的网格视图,但我想对一列进行自定义排序,因此可以按日期排序。

目前是作为字符串排序的,所以排序不正确。

数据来自 SQL DB。有没有办法只对日期列进行 SQL 排序?

【问题讨论】:

  • 您是否尝试过使用排序事件(据我记得是名称)?在里面,您可以读取您传递的排序方向,然后根据该列对数据源进行排序。之后将数据源重新绑定到 GridView。

标签: c# asp.net sorting gridview


【解决方案1】:

嘿,对于自定义排序,您需要在 aspx 页面上定义 Sort Expression,然后需要在 .cs 页面上定义属性以保持当前选择,如 ASC/DESC 并在 OnSorting 事件上进行编码。我一一编码。

ASPX 代码。

  <asp:TemplateField HeaderText="DateTest" SortExpression="DateTest">

.CS 代码。

定义保存当前选择的枚举

/// <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;
        }
    }

在排序事件中。

 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;
            }
        }

    }

希望对你有所帮助。

【讨论】:

  • 谢谢。这就是我想要的
  • 这可能是一个愚蠢的问题,但 enmSortHeader 是什么?我在 MSDN 和 Google 上搜索过,但找不到这个对象类型是什么。
  • enmSortHeader 只是一个枚举,它的值是ASC=0DESC =1
  • 我试图弄清楚什么是 SessionClass 我的 VS 没有找到命名空间
  • 这就像 Session["Grid1"],我创建了 SessionClass 来维护每个 Sessions
【解决方案2】:

您可以为要排序的数据列提及排序表达式属性

例如:SortExpression="Date"

其中 Date 是您要排序的数据列的名称

由于您的日期是字符串格式,您应该将其转换为 DateTime,然后您就可以对日期进行排序。 如果您使用 DataTable 来绑定网格视图,请先将其转换为 DataTime

dt.Columns.Add("DateTime", System.Type.GetType("System.DateTime"));

【讨论】:

    【解决方案3】:

    只想更正@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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-28
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 2011-02-19
      • 1970-01-01
      相关资源
      最近更新 更多