我必须具有一种文化,其日期格式如dd.mm.yyyy,但是当我将其转发到行过滤器时,如下所示:
myTable.DefaultView.RowFilter="opened_on=#"+datetimepicker1.value.ToShortDateString()+"#"
它说输入字符串不是有效的DateTime格式。
当用户具有dd / mm / yyyy格式的区域性而没有时。它完美地工作。
有人知道为什么吗?
答案 0 :(得分:0)
当您要使用DateTime列上的DefaultView.RowFilter属性过滤DataTable的行时,应始终使用不变区域性的常规格式。 (MM / dd / yyyy),如MSDN中针对DataColumn类中的Expression property所述
所有文字表达必须以不变文化表达 语言环境。当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 + "#";