Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Разработка Windows Forms > Корректная сортировка даты |
Автор: m9yt 13.6.2013, 13:17 |
Добрый день. У меня есть dataGridView, в котором один из столбцов заполнен датами в формате dd.mm.yyyy. При сортировке столбца даты корректно не сортируются. Например, такие значения отсортировать не получается: "01.11.2007" "02.09.2010" "02.11.2007" "06.02.2008" "10.06.2006" Есть какие - то идеи? |
Автор: gambit 13.6.2013, 13:36 |
Они отсортированы как строки содержащие даты. Надо копать в этом направлении |
Автор: m9yt 13.6.2013, 14:01 |
В общем, разобрался с сортировкой добавлением класса сортировки. Теперь вопрос: как отловить событие, которое происходит при нажатии на заголовок столбца, при котором, собственно, и сортируется столбец. |
Автор: m9yt 13.6.2013, 14:48 |
Событие отловил, но проблема в том, что, даже если я вставлю туда свой код сортировки, столбец все равно потом отсортируется неправильно по умолчанию. Можно ли как - то отключить сортировку по умолчанию, но при это оставить рабочим глиф сортировки и кнопку соответственно? |
Автор: diadiavova 13.6.2013, 15:12 | ||
О каком событии речь? Ты не пишешь, что конкретно сделал, но ждешь, что тебе помогут в решении возникших при этом проблем. Если это было событие SortCompare, то в конце надо пометить его обработанным
Добавлено через 2 минуты и 22 секунды А вообще даты грид и так прекрасно сортирует и для этого не надо велосипед изобретать. Надо просто корректно указать тип данных столбца и убедиться в том, что используемый формат даты соответствует применяемой культуре. |
Автор: m9yt 13.6.2013, 15:21 |
Да, событие SortCompare. Насчет типа данных: я указывал тип typeof(DateTime) - безрезультатно. |
Автор: m9yt 13.6.2013, 15:49 | ||
dataGridView1.Columns.Add("", "Дата"); dataGridView1.Columns[0].ValueType = typeof(DateTime); |
Автор: diadiavova 13.6.2013, 16:20 |
А в ячейки ты что добавлял, даты или строки? Я вот написал проект, правда когда создавал, не посмотрел, что он на VB.Net, но там код простейший, думаю проблем не вызовет. Все работает нормально. Проект в аттаче |
Автор: m9yt 13.6.2013, 16:31 | ||||||
Просто вписал эту единственную строчку в обработчик - ничего не изменилось. Какова тогда ее суть? Добавлено через 3 минуты и 36 секунд
Естественно строки, НО в формате даты. В этом - то и проблема. Поэтому и пришлось писать свой класс, который берет данные ячейки и перегоняет их в дату. Теперь осталось решить вопрос с нажатием на заголовок столбца, чтобы применялась лишь моя сортировка, а стандартная отбрасывалась. |
Автор: diadiavova 13.6.2013, 16:41 |
Почему естественно? Я вот добавил даты и все нормально сортируется. После ее выполнения сортировка продолжаться не должна. У тебя ведь в этом проблема? Добавлено @ 16:44 Ты, кстати, SortMode для столбца правильно установил? |
Автор: m9yt 13.6.2013, 19:09 | ||||
Ну потому что в ячейку данные записываются вот так:
и т.д. SortMode = DataGridViewColumnSortMode.Automatic; После выполнения той (единственной) строки в обработчике самая первая строчка остается на месте, остальные сортируются по-старому - как строки. |
Автор: diadiavova 13.6.2013, 19:35 |
Во-первых, от этого строка не перестает быть строкой и не становится датой. Во-вторых, не вижу ничего естественного в том, что ты загоняешь данные в виде строк, а ждешь, что сортироваться они будут как даты. Я тебе сказал уже, что надо загонять туда даты и даже пример выложил, где все сортируется правильно. И получаешь режим, используемый по умолчанию, но коль скоро сортировка у тебя программная, то видимо и режим надо задать Programatic. Не? ![]() |
Автор: m9yt 13.6.2013, 19:43 | ||
Можно сделать так (просто после получения данных перегонять столбец в даты). Может это и будет медленно на больших таблицах, но зато выглядит лучше, чем всякие костыли, и сортируется автоматически.
|
Автор: diadiavova 13.6.2013, 19:45 | ||
Зачем? ![]() ![]() |
Автор: m9yt 13.6.2013, 19:47 |
Ну механизм заполнения таблицы из базы делал не я. И раз стандартной сортировкой не сортируется, значит у них загоняется в виде строк... Нужно будет у них уточнить. |
Автор: diadiavova 13.6.2013, 19:49 | ||
Ну тогда да - придется какой-нибудь костыль мастерить. просто запроси экземпляр и проверь его тип. |