【发布时间】:2011-08-10 06:48:13
【问题描述】:
我有我的 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(即某个日期)排序。但我希望我的结果按第二列排序(比如这个列名是状态)。我希望以这样一种方式对记录进行排序,即第一个所有用户的整体状态应该出现在进行中,然后出现待处理,然后完成。正如你所说,这不是一个简单的 order by 子句。
如何使用我的 SqlDataSource 控件以这种方式排序?
【问题讨论】:
-
由于它是一个字符串列(根据显示的数据),我想您需要覆盖此列上的比较方法并编写您的逻辑进行排序。
-
@zenwalker:我知道这是标准方法。但是这段代码超级难看。没有可以覆盖此方法的类。所有的sql直接混在aspx页面中。此代码是某家公司赠送给我们的。
-
正如 Martin Fowler 所说,您首先必须重构意大利面条形状的代码的主要部分。然后你可以把这个逻辑放在一个类中,你可以覆盖比较方法,它是一个 Object 类的虚拟方法。
-
@zenwalker:这是一种耗时且更好的方法。我必须在 2 小时内完成,所以这对我来说几乎是不可能的。我有个主意。我将使用 UNION 魔法和硬编码'COMPLETE'、'IN PROGRESS' 等三个值;)。一个有效的补丁..
标签: c# asp.net sql gridview sqldatasource