Как скрыть ненужные строки после поиска в datagridview?

У меня выполняется вот такой поиск по строке:

for (int i = 0; i < dataGridView1.RowCount; i++)
{
    dataGridView1.Rows[i].Selected = false;
    for (int j = 0; j < dataGridView1.ColumnCount; j++)
        if (dataGridView1.Rows[i].Cells[j].Value != null)
            if (dataGridView1.Rows[i].Cells[j].Value.ToString().Contains(textBox1.Text))
            {
               dataGridView1.Rows[i].Selected = true;
                break;
            }
}

Я не могу использовать фильтр, т.к. у меня нет datatable. Я уже умучилась с ним (у меня List<> который с AddRange выводится, но это другая история).

Я использую две строки:

dataGridView1.CurrentCell = null;
dataGridView1.Rows[i].Visible = false;

Внутри последнего if-a и с их помощью скрываются те строки, в которых есть совпадение по textbox. А мне надо так, что бы скрывались те, где нет совпадений.

Пробовала ставить

if (!dataGridView1.Rows[i].Cells[j].Value.ToString().Contains(textBox1.Text))

но тогда скрывается все. Хочу как то на костылях выйти из этой ситуации.

Есть такая строка для фильтра:

(dataGridView1.DataSource as DataTable).DefaultView.RowFilter =
    String.Format("title like '{0}%'", textBox2.Text);

но выдает ошибку:

System.NullReferenceException: "Ссылка на объект не указывает на экземпляр объекта".

(... as System.Data.DataTable) вернул null, при попытке преобразовать List<Films> films в DataTable, говорит что это невозможно.


Ответы (1 шт):

Автор решения: Alexander Petrov

Допустим, имеется коллекция List<Film> films. И она привязана к датагриду:

dataGridView1.DataSource = films;

Тогда отфильтровать данные проще всего так:

var filtered = films
    .Where(x => x.Title.Contains(textBox2.Text))
    .ToList();

dataGridView1.DataSource = filtered;
→ Ссылка