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

TCM*_*TCM 0 c# sql asp.net gridview sqldatasource

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

Select Username, Status from Users Order by LastLoginTime desc
Run Code Online (Sandbox Code Playgroud)

我的桌子是这样的:

ABC IN PROGESS  somedate
DEF COMPLETE    somedate
PQR PENDING     somedate
JLM COMPLETE    somedate
LKM IN PROGESS  somedate
Run Code Online (Sandbox Code Playgroud)

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

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

nav*_*een 5

您应该使用自定义排序次序使用CASE的SQL.试试这个

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
Run Code Online (Sandbox Code Playgroud)

所以实际上你的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" 
Run Code Online (Sandbox Code Playgroud)

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