С# - DataGridView и SelectedCells - Поиск индексов строк выбранных ячеек

Каков самый чистый способ попросить DataGridView вернуть "индексы строк, которые выбрали ячейки"? Это не то же самое, что DataGridView.SelectedRows. Я не разрешаю выбор строк или столбцов. Поэтому пользователи должны выбирать блоки ячеек. Мне просто нужно выяснить, какие строки выбрали в них ячейки.

Есть ли какое-то умное выражение лямбда, которое я должен использовать? Что бы вы сделали?

Если это помогает: В коде, который я пишу, я уже унаследовал от DataGridView, и я в своем собственном классе DataGridViewExt.

2 ответа

Решение LINQ:

var rowIndexes = dgv.SelectedCells.Cast<datagridviewcell>()
 .Select(cell => cell.RowIndex)
 .Distinct();
</datagridviewcell>

Edit:

Вам просто не хватало роли. Это необходимо, потому что DataGridViewSelectedCellCollection не реализует общий IEnumerable, просто IEnumerable, поэтому, когда вы перечисляете значения, они имеют тип Object. С броском это даст:

int[] rowIndexes = (from sc in this.SelectedCells.Cast<datagridviewcell>() 
 select sc.RowIndex).Distinct().ToArray();
</datagridviewcell>


IEnumerable<int> indexes = 
 (from c in dataGridView1.SelectedCells.Cast<datagridviewcell>()
 select c.RowIndex).Distinct();
</datagridviewcell></int>

licensed under cc by-sa 3.0 with attribution.