Is there any way to use a LINQ style query to find a DataGridView row? I am trying to find the one bound to a specific object and highlight it.
MyDatagrid.R
For those who came here looking for the VB-version, Lee's answer translates to:
MyDatagrid.Rows.Cast(Of DataGridViewRow)().FirstOrDefault(Function(r) r.DataBoundItem Is myItem).Selected = True
Furthermore, if you're like me, and are using this to find your DataGridViewRow
from your bound DataTable.DataRow
(DataGridView.DataSource = DataTable
), then you can access it like this:
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
This is much more efficient than looping through your DataGridView
looking for matching values.
You need to cast to IEnumerable<DataGridViewRow>
since DataGridViewRowCollection
only implements IEnumerable
:
MyDatagrid.Rows
.Cast<DataGridViewRow>()
.FirstOrDefault(r => r.DataBoundItem == myItem).Selected = true;