winforms - DefaultView.RowFilter 使用不同的 DateTime 格式引发 Format Exception
问题描述
我必须有一种文化,它的日期格式像这样 dd.mm.yyyy ,但是当我将它转发到这样的行过滤器时:
myTable.DefaultView.RowFilter="opened_on=#"+datetimepicker1.value.ToShortDateString()+"#"
它说输入字符串不是有效的 DateTime 格式。
当用户有 dd/mm/yyyy 格式的文化时,没有 . 它完美地工作。
有人知道为什么吗?
解决方案
当您想要使用 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 + "#";
推荐阅读
- parsing - 得到`PHP解析错误:语法错误,意外':',期待';' 或'{'`
- javascript - 验证以检查用户是否输入了正确的格式
- javascript - 多个 div 网格不响应阅读更多,阅读更少
- reactjs - Invariant Violation:试图注册两个同名的视图RNCSafeAreaProvider
- wordpress - 将域指向子目录
- flutter - 具有 .obs 和 hive 字段的颤振模型
- javascript - 如何从使用 Python 的网站中提取使用 javascript 生成的表数据?
- c# - 滚动问题 - 当我向上移动滚动条时不回滚
- javascript - 使用 typescript/javascript 解构对象
- powershell - Connect-MsolService -Credential 不再起作用了吗?