2012-01-19 30 views
3

WindowsフォームでDatagridViewコントロールを使用しています。 selectionModeプロパティはCellSelectに設定されています。
選択したセルに基づいてDatagridViewRowで操作したいです。 DataGridViewコントロールは、DataSourceにバインドされています。DatagridViewで選択したセルに基づいて行コレクションを取得する方法

選択したセルに基づいて行コレクションを取得するにはどうすればよいですか?

+0

*選択したセルに基づく行のコレクション*?あなたはそれを少し拡張することができます、あなたが同じものを探しているかどうかわからない 'SelectedCells'コレクションがありますか? – V4Vendetta

答えて

1
List<DataGridViewRow> rowCollection = new List<DataGridViewRow>(); 

foreach(DataGridViewCell cell in dataGridView.SelectedCells) 
{ 
    rowCollection.Add(dataGridView.Rows[cell.RowIndex]; 
} 
+2

cell.OwningRowは少し直接的です。 – ColinE

+0

右。私はそれが存在することを知らなかった。ありがとう –

+0

問題ありません。あなたの答えに間違いがないわけではなく、それはまだ非常に簡単です! – ColinE

5

DataGridView.SelectedCellsは、選択されているセルのリストを表示します。そのコレクション内のDataGridViewCellインスタンスのそれぞれはOwningRowです。これにより、独自の行コレクションを作成できます。例えば

using System.Linq; 

IEnumerable<DataGridViewRow> selectedRows = dgv.SelectedCells 
               .Select(cell => cell.OwningRow) 
               .Distinct(); 
+2

同じ行が複数回Collectionの一部になる可能性があります。 – V4Vendetta

+0

@ v4vendetta良い点。私はDistinctを追加しました。 Linq FTW。 – ColinE

6

提供構文では動作しないのLINQとして提供答え。 Datagridviewはienumerableをサポートしていないため、使用する必要があります。

 IEnumerable<DataGridViewRow> selectedRows = dgPOPLines.SelectedCells.Cast<DataGridViewCell>() 
              .Select(cell => cell.OwningRow) 
              .Distinct(); 
関連する問題