簡體   English   中英

按日期時間值排序列不是字符串值?

[英]Sorting Column By DateTime Value Not String Value?

我正在使用它來對列表視圖進行排序: http//support.microsoft.com/kb/319401它工作得很好,除非我嘗試對日期列進行排序,它將在晚上10點之后出現2AM(因為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並使用上面的代碼進行排序?

期待中的“排序日期”一節這篇文章 -你更換比較方法。

示例代碼:

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);
}

這里標記為正確的答案對我沒有幫助。 我的應用程序似乎進入了無限循環的拋出異常。 為了避免使用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);
}

您應該從列表視圖中獲取項目並將日期/時間字符串轉換為DateTime對象,然后對這些對象調用sort(將它們放入集合中),然后將它們放回ListView中。

希望這能解決您的問題。

上面是正確的,因為你正在進行列表的字符串比較。

嘗試轉換為DateTime和Create List<DateTime>然后對其進行排序,

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM