One of the way is to, instead of adding rows to the datagridview, add datarows to a datatable and then once datatable is ready make it the datasource of your datagridview.
Something like-
DataTable table = new DataTable();
table.Columns.Add("Name", typeof(String));
table.Columns.Add("...", typeof(String));
foreach (var element in list)
table.Rows.Add(element.Name, element.Something);
dataGridView1.DataSource = table1;
table.DefaultView.RowFilter = "Name Like '...'";
For detailed answer, check the following thread in stackoverflow-
c# - Filtering an DataGridView that doesn't have databinding - Stack Overflow[
^]
Hope, it helps :)