c按日期时间绑定源过滤器

本文关键字:过滤器 绑定 时间 日期 | 更新日期: 2023-09-27 18:21:20

我遇到的问题是过滤器不接受日期时间的时间部分。

为了清晰起见,

这是有效的。

" AND NextWorkDate <= #" + DateTime.Now.AddDays(1).ToString("dd.M.yyyy") + "#"

这行不通。

" AND NextWorkDate <= #" + DateTime.Now.AddDays(1).ToString("dd.M.yyyy H:mm:ss") + "#"

每当我试图包含datetime的时间方面时,过滤器就是不起作用,它不返回任何行。

我已经尝试了一千种不同的方法,我真的不明白为什么不花时间。

筛选器正在与之进行比较的数据源列是一个日期时间,格式为dd.M.yyyy H:mm:ss。

数据库列的格式完全不同,为yyyy-mm-dd hh:mm:ss:fff

这会不会造成一些问题?我认为这不是因为过滤器应用于数据源,而不是数据库。

c按日期时间绑定源过滤器

缺少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-SqlLinq-To-Entities来查询数据源;如果只是内存列表,则使用Linq-To-Objects。然后你只需要重新分配DataSource

已解决。

问题出在我自己的愚蠢上。在字符串进入bindingsource之前,还有另一个类在筛选它。