【问题标题】:vb.net bindingsource filter cast date to stringvb.net bindingsource 过滤器将日期转换为字符串
【发布时间】:2010-12-08 17:03:08
【问题描述】:

我在 VB.net 中使用 Binding sourcefilter 方法根据搜索框中的文本过滤 DataGridView 中的结果。但是,此搜索的想法是,如果 任何 单元格包含文本,它会显示一行。所以我的过滤器字符串最终看起来像这样:

filter = "ProductId LIKE '%" & searchterm & "%'" & " OR ScanDate like '%" & searchterm & "%'"

但是,当我尝试将过滤器放在过滤器属性中时,它会抱怨说它无法将日期列转换为文本以进行比较。

有没有办法告诉过滤器将日期时间单元格转换为字符串?

我正在考虑做的是在数据集中有一个隐藏列,其中包含日期的转换版本,我会告诉过滤器过滤 那个 列。

这是我的分配代码:

bindingSource.Filter = filter 
dgv.DataSource = bindingSource.DataSource

【问题讨论】:

    标签: vb.net datagridview casting filtering bindingsource


    【解决方案1】:

    我明白了,它有效

    bindingSource.Filter = "ProductId LIKE '%" & searchterm & "%' OR Convert( ScanDate, 'System.String') LIKE '%" & searchterm & "%'"
    

    【讨论】:

      【解决方案2】:

      您应该分解过滤器代码。因此,与其在一行中设置您的过滤器代码,不如在searchterm 上运行测试以查看它是否是有效的DateTime。然后,您可以相应地更改您的过滤器,因为我认为您不会拥有类似于 DateTimeProductId

      try
      {
          string dt = DateTime.Parse(searchterm).ToString();
          filter = "ScanDate like '%" & searchterm & "%'"
      }
      catch
      {
          filter = "ProductId LIKE '%" & searchterm & "%'"
      }
      

      对于 C# 代码很抱歉,但应该可以直接转换为 VB.Net。

      【讨论】:

      • 它是 c# 没问题,这很实用,但是,它会过滤每个按键,并且 productid 看起来像这个 PRD1234567,所以如果他们输入“23”,它可以显示任何带有23 或扫描日期,例如每月 23 日:“23/01/2010 12:00:00”
      • 如果他们输入 23,它将查看第 23 小时、第 23 分钟和第 23 秒,而不仅仅是一天搜索。您需要填充 DateTime 以使其成为有效的日期格式才能使其正常工作。根据应该是 DD/MM/YYYY hh:MM:SS 的格式搜索 23 将不起作用。
      • 这就是我想要的。单独输入 23 将返回 productid 为 23 或 datetime 的任何方面包含 23 的任何行,例如“23/01/2010 12:00:00”或“10/01/ 2023 12:00:00”或“2010 年 10 月 1 日 12:23:00”。如果我可以将列转换为过滤器本身的字符串,它将完全按预期工作。我不知道该怎么做。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-03
      • 1970-01-01
      • 2015-04-27
      • 2011-11-28
      相关资源
      最近更新 更多