2011-08-09 16 views
8

Iテキストボックスを使用してのDataGridViewをフィルタリングするために疲れて、テキストボックスはタブページに含まれているが、それが動作していない、ここでのコードは次のとおりです。C#でテキストボックスを使用してdatagridviewをフィルタリングする方法は?

private void textBox1_TextChanged(object sender, EventArgs e) 
    { 
     try 
     { 
      ((DataTable)dataGridView1.DataSource).DefaultView.RowFilter = "like '%" + textBox1.Text.Trim() + "%' "; 
     } 
     catch (Exception) { } 

    } 
+0

キャッチされた例外はありますか。 – jv42

+0

構文エラー: 'Like'演算子の前にオペランドがありません。 – amer

答えて

18

RowFilterは、フィルタを指定することができます列の値に基づいて、。したがって、LIKEは特定の列に適用され、行全体には適用されません。

"YourColumn like '%" + textBox1.Text.Trim().Replace("'", "''") + "%' 

または、クリーナー:

string.Format("YourColumn like '%{0}%'", textBox1.Text.Trim().Replace("'", "''")); 
だからあなたの条件は

"YourColumn like '%" + textBox1.Text.Trim() + "%' 

また、あなたがそれをエスケープする必要がありますので、テキストボックスが'文字が含まれている可能性があることを忘れないでくださいする必要があります

+1

+1後で誰かを混乱させる可能性があるので、「列に適用する」を明確にする必要があると思います。 –

+1

+1 '' 'からのエスケープを指摘してください。 –

+0

@コードモンキー、どのように私が明確にできるかわかりません...どうしたらいいですか? –

4

これを試してみてくださいその手紙がどこにあっても手紙を探しています(初め、中、または最後に)

private void TextBox1_TextChanged(object sender, EventArgs e) 
    { 
     try 
     { 
      //this code is used to search Name on the basis of TextBox1.text 
      ((DataTable)dataGridView1.DataSource).DefaultView.RowFilter = string.Format("Column_Name like '%{0}%'", TextBox1.Text.Trim().Replace("'", "''")); 
     } 
     catch (Exception) 
     { 

     } 
    } 

最初の文字から次の文字を順に検索します。

try 
     { 
      ((DataTable)dataGridViewX1.DataSource).DefaultView.RowFilter = "Column_Name like'" + textBox1.Text.Trim().Replace("'", "''") + "%'"; 
     } 
     catch (Exception) 
     { 

     } 
関連する問題