vb.net bindingsource过滤器将日期转换为字符串

时间:2010-12-08 17:03:08

标签: vb.net datagridview casting filtering bindingsource

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

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

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

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

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

这是我的分配代码:

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

2 个答案:

答案 0 :(得分:2)

我明白了,工作

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

答案 1 :(得分:0)

您应该细分过滤器代码。因此,我不是在一行中设置您的过滤器代码,而是在searchterm上运行测试以查看它是否有效DateTime。然后,您可以相应地更改过滤器,因为我认为您不会有ProductId DateTime

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

对不起C#代码,但应该直接转换为VB.Net。