0

我必须有一种文化,它的日期格式像这样 dd.mm.yyyy ,但是当我将它转发到这样的行过滤器时:

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


它说输入字符串不是有效的 DateTime 格式。
当用户有 dd/mm/yyyy 格式的文化时,没有 . 它完美地工作。
有人知道为什么吗?

4

1 回答 1

0

当您想要使用 DateTime 列上的 DefaultView.RowFilter 属性过滤 DataTable 的行时,您应该始终使用不变区域性的一般格式。(MM/dd/yyyy),如 MSDN 中针对DataColumn 类的Expression 属性所述

所有文字表达式必须在不变的文化语言环境中表达。当 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 + "#";
于 2018-12-09T19:00:31.417 回答