【问题标题】:DefaultView.RowFilter throws Format Exception with different DateTime formatsDefaultView.RowFilter 使用不同的 DateTime 格式引发 Format Exception
【发布时间】:2019-05-10 17:49:15
【问题描述】:

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

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


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

【问题讨论】:

  • 你确定吗?这不应该以任何方式工作。此处传递日期的正确方法是使用 MM/dd/yyyy 或 MM.dd.yyyy 格式(顺便说一下,mm 代表分钟,MM 代表月)
  • @Steve 你知道一些指定 defaultview.rowfilter 过滤规则的文章吗?

标签: winforms datetime cultureinfo rowfilter defaultview


【解决方案1】:

当您想要使用 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 + "#";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-24
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 2017-10-30
    • 2013-05-30
    相关资源
    最近更新 更多