【问题标题】:How to sort DataGrid column如何对 DataGrid 列进行排序
【发布时间】:2009-05-19 21:09:38
【问题描述】:

我有一个数据网格,其中包含从数据库检索的数据,并且数据网格以与数据库中相同的格式显示数据。

其中一列是 DateFrom,这是我要排序的列。 Dateform 以 Varchar 形式存储在数据库中,因此按字母顺序排序,例如 2/2004、2/2008、4/2003。我想将 DatFrom 转换为典型的 DateTime,并在数据网格中显示之前对值进行数字排序。

有什么办法吗?

谢谢

艾因

【问题讨论】:

    标签: c# database datagrid


    【解决方案1】:

    我创建了一个小演示表(测试)。插入了一些测试日期并进行了选择查询:

    Create Table test(dt varchar(10))
    Go
    Insert Into test(dt)
    Select '2/2004'
    Union Select '2/2008'
    Union Select '4/2003'
    Go
    
    Select *
    From test
    Order By Convert(datetime, '1/' + dt, 103)
    

    【讨论】:

      【解决方案2】:

      可能包装列以实现 IComparable 接口,以便您可以提供自定义排序,here is an example

      【讨论】:

        【解决方案3】:

        我想我明白你在这里问什么。如果我不在基地,请告诉我。我认为解决此问题的最简单方法是在 select 语句中从数据库中获取数据,但它可能不一定是 best 方法。这是我想出的:

        由于您的“DateFrom”格式为“MM/yyyy”,您将无法直接执行 CAST() 操作。我能想到的获得有效 DATETIME 值的最佳方法是解析当前的 DateFrom 列并将所有日期视为本月的第一天,然后您可以在 datagrid 列上设置“MM/yyyy”的格式,它仍然会正确渲染。 CAST() 语句可能是这样的:

        SET DATEFORMAT MDY
        
        SELECT CAST(SUBSTRING(DateFrom, 0, CHARINDEX('/',DateFrom))
                + '/1/'
                + SUBSTRING(DateFrom, CHARINDEX('/',DateFrom) +1, 4) AS DATETIME) AS DateFrom
        

        我知道这不是最优雅的方法,但只要您的日期格式一致,它应该可以工作。祝你好运!

        【讨论】:

          【解决方案4】:

          我不确定我是否理解您的问题。然而,如何在 SQL 端对行进行排序:

          SELECT ...
          ORDER BY Substring(DateFrom, CHARINDEX('/', DateFrom) + 1, 4) 
                   + Lpad(DateFrom, 7, '0');
          

          它将原始的 2/1999 更改为 199902/1999,以便可以将其作为字符串进行比较。斜线后面的部分只是因为我不想裁剪字符串,因为它不需要。

          SELECT ...
          ORDER BY Cast(int, 
                        Substring(DateFrom, CHARINDEX('/', DateFrom) + 1, 4) 
                 * 100 
                 + Cast(int, 
                        Substring(DateFrom, 1, CHARINDEX('/', DateFrom));
          

          【讨论】:

            【解决方案5】:

            谢谢你们。我会调查的。我不得不暂时放弃这个项目。我会让你知道我是否可以让它工作。

            【讨论】:

              猜你喜欢
              • 2011-05-13
              • 1970-01-01
              • 2014-12-12
              • 2012-08-12
              • 2014-07-11
              • 2013-01-31
              • 2011-04-21
              • 1970-01-01
              • 2016-08-13
              相关资源
              最近更新 更多