DefaultView.RowFilter不能与日期一起使用

时间:2019-01-12 13:03:11

标签: c# winforms datetime datagridview rowfilter

我正在使用以下代码来过滤我的行:

 (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 :(得分:3)

DateTime.ToString()以当前区域性格式返回日期字符串,而过滤器表达式将使用不变区域性而不是当前区域性进行解析。

  

所有文字表达式必须在不变的区域性语言环境中表示。当DataSet解析并转换文字表达式时,它   始终使用不变的文化,而不是当前的文化。 [docs]

您可以使用以下格式正确地传递日期:

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

您也可以像这样使用standard date and time format specifiers

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