按日期时间值排序列不是字符串值?

时间:2011-04-07 14:54:11

标签: c# sorting listview

我用它来排序列表视图:http://support.microsoft.com/kb/319401 它工作得很好,除非我尝试对日期列进行排序时,事件是在晚上10点之后发生的事情(因为2大于1)。

4/7/2011 10:00:00 PM
4/7/2011 2:00:00 AM

这是我正在使用的代码:

var lvcs = new ListViewColumnSorter();
ListView.ListViewItemSorter = lvcs;
lvcs.Order = SortOrder.Ascending;
lvcs.SortColumn = 1; //<-Contains DateTime values in string format
ListView.Sort();

那么如何转换为DateTime并使用上面的代码进行排序?

4 个答案:

答案 0 :(得分:10)

查看this article中的“排序日期”部分 - 您替换了比较方法。

示例代码:

try {
    DateTime dateX = Convert.ToDateTime(listviewX.SubItems[ColumnToSort].Text);
    DateTime dateY = Convert.ToDateTime(listviewY.SubItems[ColumnToSort].Text);
    compareResult = ObjectCompare.Compare(dateX, dateY);
}
catch {
    compareResult = ObjectCompare.Compare(listviewX.SubItems[ColumnToSort].Text, listviewY.SubItems[ColumnToSort].Text);
}

答案 1 :(得分:0)

您应该从列表视图中获取项目并将日期/时间字符串转换为DateTime对象,然后对这些对象调用sort(将它们放入集合中),然后将它们放回ListView中。

希望能解决您的问题。

答案 2 :(得分:0)

上面的

是正确的,因为你正在进行列表的字符串比较。

尝试转换为DateTime并创建List<DateTime>然后对其进行排序,

您可以使用DateTime.TryParse或ParseExact指定自己的解析格式

答案 3 :(得分:0)

这里标记为正确的答案对我没有帮助。我的应用程序似乎进入了无限循环的抛出异常。为了避免使用try / catch和捕获抛出的exeptions,我使用了以下内容并且它完美地运行:

DateTime dateX;
DateTime dateY;
if (
    DateTime.TryParse(listviewX.SubItems[ColumnToSort].Text, out dateX)
    && DateTime.TryParse(listviewY.SubItems[ColumnToSort].Text, out dateY)
    )
{
    compareResult = ObjectCompare.Compare(dateX, dateY);
}
else
{
    compareResult = ObjectCompare.Compare(listviewX.SubItems[ColumnToSort].Text, listviewY.SubItems[ColumnToSort].Text);
}