Неясно, чего вы пытаетесь достичь здесь.Похоже, это какой-то механизм «фильтра» или «выбора».Чего бы вы здесь ни пытались достичь ... кажется, вы делаете это самым сложным образом.
Как уже указывали другие на эту ошибку ... Последовательность не содержит элементов?
В комментариях и ошибке «ясно» говорится, что вы получаете «InvalidOperationException».Я не эксперт по LINQ, поэтому, я предполагаю, что когда вы используете следующую команду ...
Where(r => r.Cells["Column1"].Value.ToString().Contains(enteredText)).First();
Если enteredText
НЕ найден ... что вернет .First()
?Это может быть причиной вашей ошибки.Замена этого на хорошо прокомментированное решение ниже может решить проблему «this».
Where(r => r.Cells["Column1"].Value.ToString().Contains(enteredText)).FirstOrDefault();
FirstOrDefault()
вернет ноль, если текст не найден.Это означает, что он не «потерпит неудачу» с «InvalidOperationException», когда текст не найден ... однако переменная row
будет иметь значение null, и код будет обязательным «провалиться» на следующей строке… на этот раз сисключение нулевого указателя, поскольку row
будет нулевым, если текст не найден.
Не зная, что вы пытаетесь сделать в общей перспективе, я могу только настоятельно рекомендовать вам использовать какую-то «коллекцию»для хранения данных в сетке, большинство из этих DataSources
имеют встроенные механизмы, помогающие при выполнении таких задач, как поиск / сортировка и т. д. Очевидно, что вам потребуется больше усилий для самостоятельного управления данными сетки.
Без использования источника данных приведенный ниже код должен выполнять то, что вы описываете.
private void Searchvalue_TextChanged(object sender, EventArgs e) {
dataGridView1.ClearSelection();
var targetText = Searchvalue.Text;
if (targetText != String.Empty) {
foreach (DataGridViewRow row in dataGridView1.Rows) {
if (!row.IsNewRow && row.Cells["Column1"].Value != null && row.Cells["Column1"].Value.ToString().Contains(targetText)) {
row.Selected = true;
dataGridView1.FirstDisplayedScrollingRowIndex = row.Index;
break; // remove this if you want to select all the rows that contain the text
}
}
}
}