如何以特定方式对sqldatasource记录进行排序

时间:2011-08-10 06:48:14

标签: c# asp.net sql gridview sqldatasource

我有我的SqlDataSource控件。它基本上有UpdateCommand和SelectCommand。我的gridview绑定到这个sqldatasource控件。我的SelectCommand是:

Select Username, Status from Users Order by LastLoginTime desc

我的桌子是这样的:

ABC IN PROGESS  somedate
DEF COMPLETE    somedate
PQR PENDING     somedate
JLM COMPLETE    somedate
LKM IN PROGESS  somedate

目前查询结果按lastlogintime排序(即somedate)。但我希望我的结果按第二列排序(比如这个列名是Status)。我希望对记录进行排序,以便首先显示所有用户的整体状态为IN PROGRESS,然后显示PENDING然后完成。正如你所说,这不是一个简单的order by子句。

如何使用我的SqlDataSource控件以这种方式排序?

1 个答案:

答案 0 :(得分:5)

您应该在SQL中使用CASE Custom Sort Order。试试这个

SELECT Name, Status FROM UsersOrder ORDER BY CASE Status
    WHEN 'IN PROGESS' THEN 1
    WHEN 'PENDING' THEN 2
    WHEN 'COMPLETE' THEN 3
    ELSE 99
END

因此,实际上你的SelectCommand将是一个可怕的单行。 :)

SelectCommand="SELECT Name, Status FROM UsersOrder ORDER BY CASE Status WHEN 'IN PROGESS' THEN 1 WHEN 'PENDING' THEN 2 WHEN 'COMPLETE' THEN 3 ELSE 99 END" 

我担心这是唯一的解决方案。