Ответ 1
Вам нужно указать IEnumerable<DataGridViewRow>
, поскольку DataGridViewRowCollection
реализует только IEnumerable
:
MyDatagrid.Rows
.Cast<DataGridViewRow>()
.FirstOrDefault(r => r.DataBoundItem == myItem).Selected = true;
Можно ли использовать запрос стиля LINQ для поиска строки DataGridView? Я пытаюсь найти привязанный к определенному объекту и выделить его.
MyDatagrid.Rows.FirstOrDefault(r => r.DataBoundItem == myItem).Selected = true;
Ошибка 1 'System.Windows.Forms.DataGridViewRowCollection' не содержит определения для 'FirstOrDefault' и не используется метод расширения 'FirstOrDefault', принимающий первый аргумент типа 'System.Windows.Forms.DataGridViewRowCollection' у вас отсутствует директива using или ссылка на сборку?)
Вам нужно указать IEnumerable<DataGridViewRow>
, поскольку DataGridViewRowCollection
реализует только IEnumerable
:
MyDatagrid.Rows
.Cast<DataGridViewRow>()
.FirstOrDefault(r => r.DataBoundItem == myItem).Selected = true;
Для тех, кто пришел сюда в поисках версии 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
, который ищет подходящие значения.