Как скрыть ненужные строки после поиска в 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 шт):
Допустим, имеется коллекция List<Film> films. И она привязана к датагриду:
dataGridView1.DataSource = films;
Тогда отфильтровать данные проще всего так:
var filtered = films
.Where(x => x.Title.Contains(textBox2.Text))
.ToList();
dataGridView1.DataSource = filtered;