[C#]DataGridViewから,指定した条件に合うデータをLINQで取得する


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 );
}


関連記事

2 Responses to “[C#]DataGridViewから,指定した条件に合うデータをLINQで取得する”

  1. 納豆 より:

    こんにちわ。

    試してみようと
    サンプルをコピペしてみましたが、とおりませんね。
    上は DataGridViewRowCollection にキャストできないと怒られます。

    下は、ラムダ式のパラメータrow とローカル変数の DataGridViewRow row が同名で怒られますね。

    VS2012だからでしょうか。

  2. 通りすがり より:

    検索に引っかかる情報がことごとく動かないコードでうんざりです

    DataGridViewRow row = DataGridView1.Rows.Cast().First(r => r.Cells[“検索カラム”].Value.ToString() == “検索文字列”);

    ※例外処理は省いてます

通りすがり へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。