如何对DataGrid列进行排序

时间:2009-05-19 21:09:39

标签: c# database datagrid

我有一个datagrid,其中包含从数据库中重新获取的数据,datagrid以与数据库相同的格式显示数据。

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

有什么办法吗?

由于

AEIN

5 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

由于“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

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

答案 3 :(得分:0)

我不确定我是否理解你的问题。然而,如何在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));

答案 4 :(得分:0)

谢谢你们。我会调查一下。我不得不放弃这个项目一段时间。如果我能让它工作,我会告诉你的。