2014-03-24 60 views
0

操作我想按照以下方法對我的datagridview使用過濾器:無法執行「喜歡」上System.Decimal和System.String

dt = ExecuteSelect(QueryCondition, IDWindow).Tables(0) 
     _textFilters = "" 

      Dim first As Boolean = True 

      For Each f As field In fields 
       If f.Value.Length > 0 Then 

        If Not first Then 
         _textFilters += " and " 
        End If 
       _textFilters &= f.Field & " like '%" & f.Value & "%'" 
        first = False 
       End If 
     Next 

     dt.DefaultView.RowFilter = _textFilters 

我在該行得到了錯誤

dt.DefaultView.RowFilter = _textFilters 

無法對System.Decimal和System.String執行'Like'操作

因爲我的數據庫表中有一些小數位字段。

但是如果我使用:

Dim view As DataView = New DataView(grille.DataSource) 
_textFilters = "" 
Dim first As Boolean = True 
For Each f As field In fields 
       If f.Value.Length > 0 Then 
       If Not first Then 
        _textFilters += " and " 
       End If 
       Select Case f.Field.GetType.ToString 
        Case "String" 
         _textFilters &= f.Field & " like '%" & f.Value & "%'" 
        Case "DateTime" 
        Case Else 
         _textFilters &= f.Field & ">=" & f.Value 
       End Select 

        first = False 
       End If 
     Next 

     view.RowFilter = _textFilters 

代碼犯規發送一個錯誤,但過濾器不能正常工作。

希望我提前

+0

什麼'f.Field'和'f.Value'的類型? – Neolisk

+0

數字(18,0)所以我猜他們是十進制的 – YosrJ

+1

不需要猜測,只需將鼠標懸停在調試器中的變量上即可。順便說一句,關於你的實現,你可以簡化你的代碼很多,如果你把過濾器存儲在一個字符串列表中,然後執行'dt.DefaultView.RowFilter = String.Join(「和」,yourFilterList)' – Neolisk

回答

2

類似操作純粹是爲了蜇明確

感謝。如果要過濾十進制數據類型,則應使用以下操作符之一:<,>,=。

+0

謝謝你的答覆。的確如此。這就是爲什麼我用_textFilters&=「Convert(」 &f.Field&「,'System.String')」&「like'%」+ f.Value&「%'」但我沒有得到我的datagridview篩選 – YosrJ

+0

我假設.Net翻譯過濾器爲SQL並執行它反對數據庫 - 這也許就是爲什麼你的轉換不起作用。 – Donal

+1

@Donal:DataTable的過濾獨立於數據庫後端,具有自己的語法。 – Neolisk

0

假設f.Field是數字式的,使用ToString方法應該工作:

_textFilters &= f.Field.ToString() & " like '%" & f.Value & "%'" 
相關問題