Сортировка столбца по значению DateTime, а не строковое значение? - PullRequest
3 голосов
/ 07 апреля 2011

Я использую это для сортировки представления списка: http://support.microsoft.com/kb/319401 Это прекрасно работает, за исключением случаев, когда я пытаюсь отсортировать столбец даты, это происходит в 2 часа ночи после 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 ]

10 голосов
/ 07 апреля 2011

Посмотрите на раздел "Даты сортировки" в этой статье - вы заменили метод сравнения.

Пример кода:

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);
}
0 голосов
/ 22 марта 2013

Ответ, помеченный как правильный, мне не помог.Мое приложение, казалось, входило в бесконечный цикл брошенных исключений.Чтобы избежать использования try / catch и ловли брошенных исключений, я использовал следующее, и оно отлично работает:

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);
}
0 голосов
/ 07 апреля 2011

выше правильно, потому что вы делаете сравнение строк списка.

попытаться преобразовать в DateTime и создать List<DateTime> и затем отсортировать его,

. Вы можете использовать DateTime.TryParse или ParseExact, чтобы указать свой собственный формат синтаксического анализа

0 голосов
/ 07 апреля 2011

Вы должны получить свои элементы из списка и преобразовать строки даты / времени в объекты DateTime, а затем вызвать метод сортировки этих объектов (поместив их в коллекцию) и затем поместить их обратно в свой ListView.

Надеюсь, это решит вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...