如何使用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指令或程序集引用?(
您需要强制转换为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
中循环查找匹配值要高效得多。