我在VB.net中使用filter Binding source方法根据搜索框中的文本过滤DataGridView中的结果。但是,这种搜索的想法是,如果任何的单元格包含文本,它会显示一行。所以我的过滤器字符串最终看起来像这样:
filter = "ProductId LIKE '%" & searchterm & "%'" & " OR ScanDate like '%" & searchterm & "%'"
但是,当我尝试将过滤器放在过滤器属性中时,它会抱怨,说它无法将日期列转换为文本进行比较。
有没有办法告诉过滤器将日期时间单元格转换为字符串?
我正在考虑的是在数据集中有一个包含日期版本的隐藏列,我会告诉过滤器过滤那个列。
这是我的分配代码:
bindingSource.Filter = filter
dgv.DataSource = bindingSource.DataSource
答案 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。