【问题标题】:c# bindingsource filter by datetimec# bindingsource 按日期时间过滤
【发布时间】:2013-07-03 05:23:33
【问题描述】:

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

为了清楚起见,

这行得通。

" 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

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

【问题讨论】:

  • 代替一半的代码实现;一个更完整的例子会很有帮助。
  • 尝试:`'' + yourdatecolumn LIKE '2010' –

标签: c# date datetime filter bindingsource


【解决方案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-SqlLinq-To-Entities 查询数据源或Linq-To-Objects 如果它只是一个内存列表。然后你只需要重新分配DataSource

【讨论】:

  • 感谢您的回复。不,不工作。我发现有效的日期的唯一过滤格式是 dd.M.yyyy。这几天我一直在用头撞墙。
  • @user2538011:编辑了我的答案。请改用ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture)。我已经用 DataTable.Select 对其进行了测试,它使用了相同的方法。
  • 还是不行。 BindingSourceFilter 是自定义数据网格视图的属性。 datagridview 的数据源是数据库中的行列表。希望我在这里没有做错什么。
【解决方案2】:

解决了。

问题是我自己的愚蠢。在字符串进入绑定源之前,还有另一个类过滤字符串。

【讨论】:

    猜你喜欢
    • 2013-10-20
    • 1970-01-01
    • 2015-03-12
    • 2021-09-01
    • 2021-12-27
    • 1970-01-01
    • 2018-01-25
    • 2023-03-23
    • 2018-06-17
    相关资源
    最近更新 更多