20

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

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

错误 1“System.Windows.Forms.DataGridViewRowCollection”不包含“FirstOrDefault”的定义,并且找不到接受“System.Windows.Forms.DataGridViewRowCollection”类型的第一个参数的扩展方法“FirstOrDefault”(您是否缺少使用指令还是程序集引用?)

4

2 回答 2

51

您需要转换为,IEnumerable<DataGridViewRow>因为DataGridViewRowCollection只有实现IEnumerable

MyDatagrid.Rows
    .Cast<DataGridViewRow>()
    .FirstOrDefault(r => r.DataBoundItem == myItem).Selected = true;
于 2013-02-26T19:57:12.397 回答
2

对于那些来这里寻找 VB 版本的人,Lee 的回答是:

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这比循环查找匹配值要高效得多。

于 2016-05-27T14:04:32.147 回答