Задача: получить выбранную в данный момент строку/ячейку 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];