2013-02-26 5 views
13

Gibt es eine Möglichkeit, eine LINQ-Abfrage zu verwenden, um eine DataGridView-Zeile zu finden? Ich versuche das zu einem bestimmten Objekt gebunden zu finden und hervorzuheben.Wie kann ich LINQ verwenden, um eine DataGridView-Zeile zu finden?

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

Error 1 'System.Windows.Forms.DataGridViewRowCollection' keine Definition für 'FirstOrDefault' enthalten und keine Erweiterungsmethode 'FirstOrDefault' ein erstes Argument vom Typ ‚Annahme System.Windows.Forms.DataGridViewRowCollection "gefunden werden konnte (möglicherweise fehlt eine using-Direktive oder ein Assemblyverweis?)

Antwort

30

Sie müssen DataGridViewRowCollection-IEnumerable<DataGridViewRow> da werfen nur implementiert IEnumerable:

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

Für diejenigen, die hierher kamen, suchen die VB-Version, Lee Antwort übersetzt:

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

Außerdem, wenn Sie wie ich sind, und diese verwenden, um Ihre DataGridViewRow von Ihrem gebundenen DataTable.DataRow zu finden (DataGridView.DataSource = DataTable), dann können Sie es wie folgt zugreifen:

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 

Dies ist wesentlich effizienter als Schleife durch Ihre DataGridView auf der Suche nach Werten entsprechen.

Verwandte Themen