2012-02-13 5 views
1

DataGridview内のすべての列のテキストをフィルタリングしたいとします。だから私はフィルタテキストのLike%を使用します。しかし、私はテキスト(strFilter私のコードで)が時々%を含むことが分かった。そのため、構文エラーがあります。フィルターテキストに%が含まれている場合、like節を使用してフィルターを使用するにはどうすればよいですか?ここでVb.net、フィルタテキストに%が含まれている場合、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

同じ質問、別の文字。 http://stackoverflow.com/questions/439495/how-can-i-escape-square-brackets-in-a-like-clause –

答えて

1

フィルターを適用する前に、置換を入れて% - > [%]を角カッコにエスケープしてみます。

+0

は私が交換してみました:\t \t \tもしstrFilter.Contains( "%")すると \t \t \t \t strFilter.Replace( "%"、 "[" & "%" & "]") \t \t \t END IFしかし、それでも角かっこはありません..... – Summer

+0

strFilter.Contains( "%")ならばstrFilter.Replace( "%"、 "[%]")End If – AngeloBad

+0

試してみてください[]を指定しないと、静止画は表示されません。 – Summer

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で角括弧を使用することです。

+0

OPはSQLを要求せず、ADO.NET DataView RowFilterの式構文を要求しました。 –

関連する問題