【问题标题】:How do I sort my sqldatasource records in a particular way如何以特定方式对我的 sqldatasource 记录进行排序
【发布时间】: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


【解决方案1】:

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

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" 

恐怕这是唯一的解决方案。

【讨论】:

  • mann gaye boss..最简单的解决方案,比我的工会方法更好。我希望我能给你更多的票。
  • 很高兴为您提供帮助...我想您还有一些时间可以完成两个小时的任务。享受:)
猜你喜欢
  • 2019-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-02
  • 2016-07-09
  • 2020-10-11
  • 1970-01-01
相关资源
最近更新 更多