Подтвердить что ты не робот

Как я могу использовать LINQ для поиска строки DataGridView?

Можно ли использовать запрос стиля LINQ для поиска строки DataGridView? Я пытаюсь найти привязанный к определенному объекту и выделить его.

MyDatagrid.Rows.FirstOrDefault(r => r.DataBoundItem == myItem).Selected = true;

Ошибка 1 'System.Windows.Forms.DataGridViewRowCollection' не содержит определения для 'FirstOrDefault' и не используется метод расширения 'FirstOrDefault', принимающий первый аргумент типа 'System.Windows.Forms.DataGridViewRowCollection' у вас отсутствует директива using или ссылка на сборку?)

4b9b3361

Ответ 1

Вам нужно указать IEnumerable<DataGridViewRow>, поскольку DataGridViewRowCollection реализует только IEnumerable:

MyDatagrid.Rows
    .Cast<DataGridViewRow>()
    .FirstOrDefault(r => r.DataBoundItem == myItem).Selected = true;

Ответ 2

Для тех, кто пришел сюда в поисках версии VB, ответ Ли переводит на:

MyDatagrid.Rows.Cast(Of DataGridViewRow)().FirstOrDefault(Function(r) r.DataBoundItem Is myItem).Selected = True

Кроме того, если вы похожи на меня и используете это, чтобы найти свой DataGridViewRow из вашей привязки DataTable.DataRow (DataGridView.DataSource = DataTable), вы можете получить доступ к нему следующим образом:

Dim MyDataRowSearch() As DataRow = MyDataTable.Select("SomeColumn = SomeValue")
If MyDataRowSearch.Count = 1 Then
  MyDataGrid.Rows.Cast(Of DataGridViewRow)().FirstOrDefault(Function(r) DirectCast(r.DataBoundItem, DataRowView).Row Is MyDataRowSearch(0)).Selected = True
End If

Это намного эффективнее, чем цикл через DataGridView, который ищет подходящие значения.