我遇到的问题是过滤器不接受日期时间的时间部分。
为清楚起见,
这很有效。
" AND NextWorkDate <= #" + DateTime.Now.AddDays(1).ToString("dd.M.yyyy") + "#"
这不起作用。
" AND NextWorkDate <= #" + DateTime.Now.AddDays(1).ToString("dd.M.yyyy H:mm:ss") + "#"
每当我尝试包含日期时间的时间方面时,过滤器就不起作用,它不返回任何行。
我已经尝试了一千种不同的方式,我真的无法弄清楚为什么它不会花费该死的时间。
过滤器所比较的数据源列是日期时间,格式为dd.M.yyyy H:mm:ss。
数据库列的格式完全不同,如yyyy-mm-dd hh:mm:ss:fff
这可能导致一线问题吗?我认为这不是因为过滤器应用于数据源,而不是数据库。
答案 0 :(得分:1)
缺少documentation
如何按时间而不是按日期过滤BindingSource
(或DataTable,DataView等)。
但这种格式应该有效:
"AND NextWorkDate <= #yyyy-MM-dd HH:mm:ss#"
您可以DateTime.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture)
获取此格式。
string filter = string.Format("...AND NextWorkDate <= #{0}#",
DateTime.Now.AddDays(1).ToString(
"yyyy-MM-dd HH:mm:ss",
CultureInfo.InvariantCulture));
然而,我更喜欢Linq,因为它更具可读性,可维护性和更强大。因此,您可以使用linq过滤基础列表。如果您使用DataTable
使用Linq-To-DataSet
,则使用Linq-To-Sql
或Linq-To-Entities
查询数据源,或Linq-To-Objects
是否只是内存列表。然后你只需要重新分配DataSource
。
答案 1 :(得分:0)
解决。
问题在于我自己的愚蠢。在进入bindingsource之前,还有另一个类过滤字符串。