DefaultView.RowFilter引发具有不同DateTime格式的Format Exception

时间:2018-12-09 18:21:07

标签: winforms datetime cultureinfo rowfilter defaultview

我必须具有一种文化,其日期格式如dd.mm.yyyy,但是当我将其转发到行过滤器时,如下所示:

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


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

1 个答案:

答案 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 + "#";