DefaultView.RowFilter не работает с датой - PullRequest
0 голосов
/ 12 января 2019

Я использую этот код для фильтрации моих строк:

 (dataGridView1.DataSource as DataTable).DefaultView.RowFilter = 
      string.Format("DATUM > #{0}# AND DATUM < #{1}#", start, end);  

start и end определены следующим образом:

DateTime dt = dateTime_DO.Value;
DateTime dt1 = dateTime_OD.Value;
DateTime start = new DateTime(dt1.Year, dt1.Month, dt1.Day - 1, 23, 59, 59, 59);
DateTime end = new DateTime(dt.Year, dt.Month, dt.Day, 23, 59, 59, 59);

По какой-то причине это не работает. Вот скриншот структуры DataSource:

Вот строка, которая создается для фильтрации строк:

DATUM > #8/1/2019 11:59:59 PM# AND DATUM < #12/1/2019 11:59:59 PM#

1 Ответ

0 голосов
/ 12 января 2019

DateTime.ToString() возвращает строку даты в текущем формате культуры, а выражение фильтра будет проанализировано с использованием инвариантной культуры, а не текущей культуры.

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

Вы можете передать дату в правильном формате, используя:

dt.DefaultView.RowFilter = string.Format(CultureInfo.InvariantCulture.DateTimeFormat,
    "Column >= #{0}#", dateTimeValue);

Вы также можете использовать стандартные спецификаторы формата даты и времени , например:

dt.DefaultView.RowFilter = string.Format(CultureInfo.InvariantCulture.DateTimeFormat,
    "Column >= #{0:d}#", dateTimeValue);
...