Внутренние циклы обоих ваших подходов определяют видимость строки для каждой ячейки в отдельности.Если только последняя ячейка в строке не приведет к совпадению, строка в итоге будет скрыта, даже если совпадение было найдено в другой ячейке ранее.
То, что вы на самом деле хотите, это установить строку видимой, еслисовпадение было найдено в любой из ячеек в строке, поэтому вам необходимо запомнить, найдено ли совпадение в текущей строке, и установить видимость после обработки всех ячеекстрока.
Измените внутренний цикл на что-то вроде этого:
$found = $false
foreach ($cell in $row.Cells) {
if ($cell.Value.ToString() -match ($searchTextBox.Text)) {
$found = $true
Write-Host "MATCH!!!"
break
}
}
$DataGridView1.Rows[$row.Index].Visible = $found
, и он должен делать то, что вы хотите.
Дополнительное break
в условииоптимизация производительности.Когда совпадение найдено, нет необходимости проверять оставшиеся ячейки строки, поэтому вы можете пропустить оставшуюся часть цикла, установить видимость и перейти к следующей строке.