Задача: получить выбранную в данный момент строку/ячейку DataGridView и/или выбрать ее. На самом деле это одна и та же задача, если количество строк и столбцов в гриде может непредсказуемо меняться. Мы конечно можем получить выбранный столбец через свойство SelectedRows, но для этого свойство SelectionMode должно быть установлено в FullRowSelect или RowHeaderSelect. Универсальный метод будет всегда работать через выбранную ячейку и свойство SelectedCells или CurrentCell
int selRowNum = _someDataGridView.SelectedCells[0].RowIndex;
// или так
int selRowNum = _someDataGridView.CurrentCell.RowIndex;
С выбором конкретной ячейки еще хуже, по-настоящему надежно будет работать только следующий код
int rowNum = 1; DataGridViewCell cell = _someDataGridView.Rows[rowNum].Cells[0]; _someDataGridView.CurrentCell = cell; _someDataGridView.CurrentCell.Selected = true; // в некоторых случаях без этого не работает
Упростить себе жизнь можно парой простых методов
public static void SelectDataGridViewCell(DataGridView dataGridView, int rowIndex, int cellIndex) { DataGridViewCell cell = dataGridView.Rows[rowIndex].Cells[0]; dataGridView.CurrentCell = cell; dataGridView.CurrentCell.Selected = true; } public static void SelectDataGridViewRow(DataGridView dataGridView, int rowNum) { SelectDataGridViewCell(dataGridView, rowNum, 0); } public static int CalculateNewSelRowIndex(int oldRowCount, int newRowCount, int oldRowIndex) { // если осталась только одна строка int newRowIndex = 0; if (newRowCount >= oldRowCount) { newRowIndex = oldRowIndex; } else if (newRowCount > 1) { newRowIndex = newRowCount - 1; } return newRowIndex; }
How to: Get and Set the Current Cell in the Windows Forms DataGridView Control
DataGridView.CurrentCell Property
DataGridView.SelectedCells Property
DataGridView: How to select first cell in current row when MultiSelect is true
DataGridView.SelectedRows Property
Напишите как выбрать несколько строк используя Ctrl и передать их номера программе
dataGridView1.CurrentCell = dataGridView1[1,0];