Allora. Se ti serve un filtro allora la datagrid non è l'oggetto che fa per te. Ci sono 2 modi (molto simili)
1) usare l'oggetto DataView
2) usare l'oggetto BindingSource (molto versatile ma ti basta anche il DataView)
Vediamo con il DataView.
1) al posto di riempire direttamente la DataGridView, riempi il DataView (il procedimento dovrebbe essere uguale)
2) quando hai i dati dentro il dataview usi questo codice:
[Tua DataGridView].DataSource=[Tuo DataView];
Sotto l'evento TextChanged della tua TextBox:
((DataView)[Tua DataGridView]).Filter= "[Nome Colonna] like '*"+[Valore]+"'*";
così fai una like a doppia entrata. se ti serve la corrispondenza levi gli asterischi, se ti serve una like singola levi l'ultimo asterisco.
Considerazioni: la stringa di filtro è molto simile alle query sql. per cui quando filtri devi stare attento ad apici e altri caratteri come il %. la cosa a cui devi stare più attento sono gli apici. risolvi il problema così:
((DataView)[Tua DataGridView]).Filter= "[Nome Colonna] like '*"+[Valore].ToString().Replace("'"',"''")+"'*";