DataView RowFilter 和有效的 UK DateTime

DataView RowFilter and valid UK DateTime

我正在尝试向 DataGidView 添加行过滤器

列类型是从数据库中获取的日期

我使用 DateTimePicker 允许用户select一个日期,但是我不断收到错误消息

"String was not recognized as a valid DateTime."

我的代码在 ValueChanged 事件上触发如下

dt.DefaultView.RowFilter = cmbColumns.Text.ToString & " =#" & dtpFilter.Value.ToString("dd/MM/yyyy") & "#"

我已经尝试了很多变体, a)就像将日期时间传递给字符串变量 b) 剥离时间方面并在字符串中手动构建日期

我最终想确认日期是英国格式并且有效

任何帮助将不胜感激,因为我一天中的大部分时间都在做这件事

一个DateTime类型没有格式。顾名思义,DataGridView 提供了一个数据视图,它尊重系统的区域性设置以及您正在进行的任何单元格格式设置。 "en-US"文化下的一些数据:

除了改变文化,没有做任何其他事情,VIEW 变成了:

它们是相同的日期,只是显示方式不同。这都是 DGV View 方面的一部分。要将 DataView 筛选为日期:

zDV.RowFilter = String.Format("ZDate = '{0}'", #10/14/2010#)

结果:

DataView 中的数据仍然是数据 - 未针对文化或其他任何内容进行格式化。由于 DateTime 没有格式,因此您不必担心。上面的代码在过滤器中传递了一个 culture invariant/US Date (m/d/y),但它起作用了。原因是因为 DateTime 只是一个数字,而 没有格式 .

您的代码显然令人窒息的事情之一是过滤器表达式。这必须采用 文化不变 顺序 (MM/dd/yyyy),与定义日期文字的方式相同:Dim myDT = #02/29/2016#.

我使用的字符串格式版本只是为了便于阅读和定义多个条件:

zDV.RowFilter = String.Format("ZDate = '{0}' And Color = '{1}' ", dt.Date, "green")