有没有办法使用LINQ样式查询来查找DataGridView行?我试图找到绑定到特定对象的那个并突出显示它。
MyDatagrid.Rows.FirstOrDefault(r => r.DataBoundItem == myItem).Selected = true;
错误1'System.Windows.Forms.DataGridViewRowCollection'不包含'FirstOrDefault'的定义,并且没有可以找到接受类型'System.Windows.Forms.DataGridViewRowCollection'的第一个参数的扩展方法'FirstOrDefault'(是你错过了使用指令或程序集引用?)
答案 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
此外,如果您与我一样,并且正在使用此功能从您的绑定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
更有效。