DataGridViewコントロールに表示されているデータから,指定した条件に一致する行をLINQを使って取得するサンプルです。
ちょっと長いですが、1行で取得可能です。
string keyValue = "key1"; // 検索条件 DataGridViewRowCollection rowList = null; try { rowList = DataGridView1.Rows.Cast<DataGridViewRow>().Select( row => row.Cells[ "ColKey" ].Value.Equals( keyValue ) ); } catch( Exception ex ) { // 該当データなし時は、例外が発生する MessageBox.Show( ex.Message ); } |
また、キーに一致する行が1行のみだということが元から分かっている場合や、最初の1行目だけ欲しい場合は、以下のようにFirst()使用したほうが便利です。
string keyValue = "key1"; // 検索条件 DataGridViewRow row = null; try { row = DataGridView1.Rows.Cast<DataGridViewRow>().First( row => row.Cells[ "ColKey" ].Value.Equals( keyValue ) ); } catch( Exception ex ) { // 該当データなし時は、例外が発生する MessageBox.Show( ex.Message ); } |
関連記事
こんにちわ。
試してみようと
サンプルをコピペしてみましたが、とおりませんね。
上は DataGridViewRowCollection にキャストできないと怒られます。
下は、ラムダ式のパラメータrow とローカル変数の DataGridViewRow row が同名で怒られますね。
VS2012だからでしょうか。
検索に引っかかる情報がことごとく動かないコードでうんざりです
DataGridViewRow row = DataGridView1.Rows.Cast().First(r => r.Cells[“検索カラム”].Value.ToString() == “検索文字列”);
※例外処理は省いてます