DefaultView.RowFilter генерирует исключение формата с различными форматами DateTime - PullRequest
0 голосов
/ 09 декабря 2018

У меня должна быть культура с форматом даты, подобным этому dd.mm.yyyy, но когда я пересылаю ее в фильтр строк, как это:

myTable.DefaultView.RowFilter="opened_on=#"+datetimepicker1.value.ToShortDateString()+"#"


Это говорит, что вводстрока не в допустимом формате DateTime.
Когда у пользователя есть культура в формате дд / мм / гггг без.это работает отлично.
Кто-нибудь знает почему?

1 Ответ

0 голосов
/ 09 декабря 2018

Если вы хотите отфильтровать строки таблицы DataTable с помощью свойства DefaultView.RowFilter в столбце DateTime, вы всегда должны использовать общий формат инвариантной культуры.(MM / dd / yyyy), как описано в MSDN для свойства Expression из класса DataColumn

Все литеральные выражения должны быть выражены в инвариантном языковом стандарте культуры.Когда DataSet анализирует и преобразует литеральные выражения, он всегда использует инвариантную культуру, а не текущую культуру.

Это можно легко проверить с помощью чего-то подобного

DateTime t = new DateTime(2018,12,9);

// will find rows with date = September, 12 2018 
// or will fail if your date is 13/12/2018
// string fmt = t.ToShortDateString();


string fmt = t.ToString("MM.dd.yyyy");
dt.DefaultView.RowFilter = "ADateColumn = #" + fmt + "#";
...