Поскольку у вас включен только один столбец, используя событие SelectionChanged , вы можете определить, принадлежит ли DataGridView.CurrentCell к включенному столбцу и если он не установлен, CurrentCell
в ячейку включенного столбца в текущей строке:
int dgvEnabledColumn = 1;
private void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
var dgv = sender as DataGridView;
var currentCell = dgv.CurrentCell;
if (currentCell.ColumnIndex != dgvEnabledColumn )
{
dgv.CurrentCell = dgv[dgvEnabledColumn, currentCell.RowIndex];
}
}
Вы можете расширить выбор включенных столбцов, используя коллекцию столбцов (чтобы установить текущую ячейку на ближайшую / предыдущую / следующуюColumn).
Например, используя коллекцию объектов DataGridViewColumn
, определите, включена ли ячейка Current, и, если нет, установите ячейку Current на ближайший следующий включенный столбец, если таковой имеется, или ближайший предыдущий столбец.:
List<DataGridViewColumn>
можно заполнить после инициализации DataGridView:
enabledColumns = new List<DataGridViewColumn>()
{
dataGridView1.Columns[0],
dataGridView1.Columns[2]
};
List<DataGridViewColumn> enabledColumns = null;
private void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
if (enabledColumns is null) return;
var dgv = sender as DataGridView;
var currentCell = dgv.CurrentCell;
if (!enabledColumns.Any(c => c.Index == currentCell.ColumnIndex))
{
var nextCol = enabledColumns.FirstOrDefault(c => c.Index > currentCell.ColumnIndex);
if (nextCol != null) {
dgv.CurrentCell = dgv[nextCol.Index, currentCell.RowIndex];
}
else
{
var previousCol = enabledColumns.First(c => c.Index < currentCell.ColumnIndex);
dgv.CurrentCell = dgv[previousCol.Index, currentCell.RowIndex];
}
}
}