2013-02-26 37 views
13

有什么办法可以使用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指令或程序集引用?)

回答

30

你需要转换为IEnumerable<DataGridViewRow>因为DataGridViewRowCollection只实现IEnumerable

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

对于那些谁来到这里寻找VB版,李的回答翻译成:

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

此外,如果你像我一样,并以此来从找到你的DataGridViewRow您绑定DataTable.DataRowDataGridView.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循环查找匹配值更有效。