【问题标题】:Sort correctly by time open按打开时间正确排序
【发布时间】:2011-10-15 07:22:06
【问题描述】:

我在 XtraGrid 中有一个列,显示自插入记录以来经过的时间。我在服务器上计算这个并将时间作为字符串返回。

问题是它没有正确排序,请看图片 9 天多于 23 天...

知道如何以一种更好的方式进行排序吗?

【问题讨论】:

  • 单元格中的值只是文本吗?是数据绑定吗?看起来它对我来说是按字母顺序排序的。如果支持值是一个真正的 DateTime,它将使用它来排序。
  • 这些值最初是字符串还是可能是 TimeSpan?
  • 目前我在服务器上计算,在网格中我传入一个长字符串。
  • 有什么更好的方法来做到这一点?
  • 您应该将此数据作为日期时间字段存储在数据库中。这将解决您的问题以及使用字符串表示时间值的潜在问题

标签: .net sorting datagrid devexpress


【解决方案1】:

您可以将它作为 SQL 语句的一部分在服务器上进行排序(我假设您是从数据库中获取它的)。您的另一个选择是编写自己的比较函数,这将涉及将时间解析回某种时间跨度并对其进行排序。

【讨论】:

  • 在服务器上排序不是一个选项,因为用户需要有能力改变排序。
  • 啊,那么您正在考虑编写一个解析函数来将文本解析为时间跨度。或者,您可以将实际时间跨度传回并将其用作隐藏列。您必须使用一些技巧来使排序使用隐藏列。
  • 时间跨度如何?
【解决方案2】:

解决此问题的一种方法是将您的值以 int64 作为 Ticks 存储在数据库中,因此您可以在服务器端进行排序,然后在您的应用程序端,从 Ticks 创建 TimeSpan,您可以处理 @ 987654321@ 以根据需要显示它,确保您的列设置为按 Value 而不是 DisplayText 排序。

例子

在您的 GridView 位置的 CustomDisplayText 事件中

TimeSpan span = TimeSpan.FromTicks(e.Value);
e.DisplayText = string.Format("{0} days {1} hours {2} minutes", span.Days, span.Hours, span.Minutes);

【讨论】:

  • 当下划线数据是日期时,我不明白如何在网格中显示“1 天 5 小时”
  • 你得到这个排序的 Ezi 了吗?这个想法是您的基础数据将是 Int64 (Long)。然后在 CustomColumnDisplayText 中,从 eventargs e.Value 中获取该数字,将其插入 TimeSpan 然后您可以通过设置 e.DisplayText 值使其显示“1 Day 5 Hour”。希望一切顺利。
  • 不.. 它仍然无法正常工作。你能给我一些示例代码如何将长值转换为显示“1 天 5 小时”吗?谢谢
  • 是的,这绝对有很大帮助,我等了一个月才听到这个消息。这很简单,但有些我无法弄清楚我自己。非常感谢
猜你喜欢
  • 2015-05-02
  • 1970-01-01
  • 2016-09-05
  • 2017-05-12
  • 2018-10-05
  • 2018-09-02
  • 2016-01-15
  • 2011-02-24
  • 2014-10-03
相关资源
最近更新 更多