LSB71 Ответов: 2

C # и форм Windows дата сортировать текстовый формат элемента управления datagridview


Hello,
I am on demoralized!
I switched to Sqlite with my windows forms c #, great.
Finally, knowing that there is no date format, I opted for text in dd / MM / yyyy format.
The concern now is that my Datagridview is not sorting the dates correctly.
There are a lot of topics on the web, but I can't ...

I need a little help please to find an answer….

Is it possible to sort a column by code:

dd, then MM, then YYYY ignoring the slash (/)


private void Datagridview1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
           
                if (e.ColumnIndex == Datagridview1.Columns[1].Index)
                {
                     // ici le code
                }

        }

thank you,


Что я уже пробовал:

I changed the REAL, INTEGER, TEXT, NUMERIC formats but nothing helps.

Even with this example I don't understand ..

sortablebindinglist.zip.

2 Ответов

Рейтинг:
2

Richard MacCutchan

Используйте Язык Запросов SQLite: Функции Даты И Времени[^] чтобы преобразовать ваши строки и передать соответствующие значения DateTime vaues в DataGridView.


LSB71

Привет,
Спасибо,
Действительно, он работает в формате гггг-ММ-ДД, а не в формате ДД / ММ / гггг.
Так что с приведенным ниже кодом это работает ...
и я изменяю в Datagriview вот так:
Datagridview1.Columns [1] .DefaultCellStyle.Формат = "ДД / ММ / гггг";
и это здорово!
Скрыть Код Скопировать
if (e.ColumnIndex == Datagridview1.Columns[1].Индекс)
{
если (электронная.Значение != нуль)
{

е.Значение = Дата И Время.Синтаксический анализ(например.Значение.Метод toString()).ToUniversalTime();

}
}

Рейтинг:
1

OriginalGriff

На первый взгляд, вы храните свои даты неправильно.
Если вы храните даты как DATE или DATETIME в своей БД, то они будут "извлечены" в DGV как значения .NET DateTime - и они будут сортироваться правильно в любое время, независимо от формата, в котором они отображаются пользователю.

Но... если вы храните их в поле VARCHAR или NVARCHAR, то они будут импортированы как строки, а сравнение строк отличается: они всегда разрешаются первым другим символом между двумя сравниваемыми строками - никакие другие данные вообще не участвуют.

Поэтому проверьте свою базу данных и измените дизайн таблицы, чтобы хранить данные в наиболее подходящем формате - числа в числовых полях, даты и время в Столбцах даты или времени. Исправьте входной код БД для проверки данных на основе дат и передайте его в БД с помощью параметризованного запроса в виде значения DateTime.
И тогда все это просто сработает.


LSB71

Привет,
Увы, выбор невелик!
Каждое значение, хранящееся в базе данных SQLite (или управляемое компонентом database engine), имеет один из следующих классов хранения:

НУЛЕВОЙ. Это значение является нулевым значением.
ЦЕЛОЕ ЧИСЛО. Это значение представляет собой целое число со знаком, хранящееся в 1, 2, 3, 4, 6, или 8 байт в зависимости от величины значения.
РЕАЛЬНЫЙ". Это значение представляет собой значение с плавающей запятой, хранящееся в виде 8-байтового числа IEEE с плавающей запятой.
ТЕКСТ. Значение представляет собой текстовую строку, хранящуюся с использованием кодировки базы данных (UTF-8, UTF-16BE или UTF-16LE).
КАПЛЯ. Значение-это большой двоичный объект данных, сохраненный точно так же, как он был введен.
https://www.sqlite.org/datatype3.html
спасибо