如何使用LINQ查找DataGridView行

本文关键字:DataGridView 查找 LINQ 何使用 | 更新日期: 2023-09-27 18:01:11

是否有任何方法可以使用LINQ样式的查询来查找DataGridView行?我试图找到一个绑定到特定对象并突出显示它。

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

错误1"System.Windows.Forms.DataGridViewRowCollection"不包含"FirstOrDefault"的定义,也找不到接受"System.Windows.Forms.DataGrid ViewRowCollection"类型的第一个参数的扩展方法"FirstOrDefault"(是否缺少using指令或程序集引用?(

如何使用LINQ查找DataGridView行

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

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

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

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

此外,如果你和我一样,正在使用它从绑定的DataTable.DataRow(DataGridView.DataSource = DataTable(中找到你的DataGridViewRow,那么你可以这样访问它:

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