2013-02-26 102 views
13

LINQ形式のクエリを使用してDataGridView行を検索する方法はありますか?特定のオブジェクトにバインドされているものを見つけようとしています。LINQを使用してDataGridView行を検索するにはどうすればよいですか?

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

エラー1「System.Windows.Forms.DataGridViewRowCollectionは」「FirstOrDefault」の定義なし拡張メソッドが含まれていない「FirstOrDefault」タイプ「System.Windows.Forms.DataGridViewRowCollectionの最初の引数を受け入れます「見つかりませんでした(あなたがusingディレクティブまたはアセンブリ参照が不足している?)

答えて

30

DataGridViewRowCollectionだけIEnumerableを実装しているのであなたがIEnumerable<DataGridViewRow>にキャストする必要があります。

VB-バージョンを探してここに来た人のために
1

は、李氏の答えはに変換されます。さらに

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

、あなたが私に似ている、と(自分のバウンドDataTable.DataRowからあなたDataGridViewRowを見つけるために、これを使用している場合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をループよりもです。

関連する問題