2010-12-08 48 views
0

我在VB.net中使用Binding sourcefilter方法根據搜索框中的文本過濾DataGridView中的結果。但是,這種搜索的想法是,如果單元格包含文本,任何都會顯示一行。所以,我的過濾字符串結尾這樣看:vb.net綁定源過濾器將日期轉換爲字符串

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

但是,當我試圖把過濾器在過濾器屬性,它抱怨,說這不能轉換日期列文本的比較。

有沒有辦法告訴過濾器將日期時間單元格轉換爲字符串?

我正在考慮這樣做是有在包含日期的鑄造版本的數據集的隱藏列,我會告訴過濾器來過濾列。

這是我將代碼:

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

回答

2

我得到了它,它工作

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

你應該打破你的過濾器的代碼。因此,我不會在一行中設置過濾器代碼,而是在searchterm上運行測試,看看它是否是有效的DateTime。然後,你可以相應地改變你的過濾器,因爲我認爲你不會有ProductId這就像DateTime

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

對不起,對於C#代碼,但它應該直接轉換爲VB.Net。

+0

它是C#沒有問題的,這是現實,但是,每個按鍵的過濾器,和一個產品ID看起來像這樣PRD1234567,所以如果他們進入「23」它可以顯示任何產品ID,其中包含23個或掃描日期,例如一個月的23日:「23/01/2010 12:00:00」 – CrazyPenguin 2010-12-08 17:29:25