DefaultView.RowFilter 不处理日期
DefaultView.RowFilter not working with date
我正在使用此代码来过滤我的行:
(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#
DateTime.ToString()
returns 当前文化格式的日期字符串,而过滤器表达式将使用不变文化而不是当前文化进行解析。
All literal expressions must be expressed in the invariant culture locale. When DataSet parses and converts literal expressions, it
always uses the invariant culture, not the current culture. [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);
我正在使用此代码来过滤我的行:
(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#
DateTime.ToString()
returns 当前文化格式的日期字符串,而过滤器表达式将使用不变文化而不是当前文化进行解析。
All literal expressions must be expressed in the invariant culture locale. When DataSet parses and converts literal expressions, it always uses the invariant culture, not the current culture. [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);