我想过滤datagridview中所有列中的文本。所以我在滤镜文本中使用Like%。但是,我发现文本(我的代码中的strFilter)有时可能包含%。所以它有语法错误。当过滤器文本包含%时,如何使用带有like子句的过滤器?
Private Sub PassFilter(ByRef dataTable As DataTable, ByVal strFilter As String)
Try
Dim dataview As DataView = dataTable.DefaultView
Dim strExp As String = ""
For Each col As DataColumn In dataTable.Columns
If Not String.IsNullOrEmpty(strFilter) Then
If strExp = "" Then
strExp += "[" & col.ColumnName & "]" & " LIKE '%" & strFilter & "%'"
Else
strExp += " OR " & "[" & col.ColumnName & "]" & " LIKE '%" & strFilter & "%'"
End If
End If
Next
dataview.RowFilter = strExp
Catch ex As Exception
ShowMessage("Unable to filter datagridview." + ex.Message)
End Try
End Sub
答案 0 :(得分:1)
尝试将%转换为方括号:% - > [%],在应用过滤器之前使用替换。
答案 1 :(得分:0)
这是“正确”的方式 - 使用“转义序列”:
http://msdn.microsoft.com/en-us/library/ms378045.aspx
ResultSet rst =
stmt.executeQuery("SELECT col3 FROM test1 WHERE col2 LIKE '\\%moose' {escape '\\'}");
SQL Server中的另一种(非可移植)方式是使用方括号:
ResultSet rst =
stmt.executeQuery("SELECT col3 FROM test1 WHERE col2 LIKE '[%]moose'");