如何使用LINQ查找DataGridView行?

时间:2013-02-26 19:55:49

标签: c# winforms linq datagridview

有没有办法使用LINQ样式查询来查找DataGridView行?我试图找到绑定到特定对象的那个并突出显示它。

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

错误1'System.Windows.Forms.DataGridViewRowCollection'不包含'FirstOrDefault'的定义,并且没有可以找到接受类型'System.Windows.Forms.DataGridViewRowCollection'的第一个参数的扩展方法'FirstOrDefault'(是你错过了使用指令或程序集引用?)

2 个答案:

答案 0 :(得分:37)

由于IEnumerable<DataGridViewRow>仅实施DataGridViewRowCollection,您需要转为IEnumerable

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

答案 1 :(得分:1)

对于那些来这里寻找VB版本的人来说,Lee的答案转化为:

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

此外,如果您与我一样,并且正在使用此功能从您的绑定DataGridViewRowDataTable.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更有效。