Как получить ранее выбранную ячейку в событии щелчка ячейки DataGridView - PullRequest
1 голос
/ 14 мая 2019

У меня есть DataGridView, и я разрешаю выбирать только один столбец.
Я сделал это, проверив в событии CellClick, совпадает ли ColumnHeader для выбранной ячейки, и,если это не так, я сниму выделение.
Однако я хочу сделать так, чтобы он возвращался к ранее выбранной ячейке, если они выбрали ячейку в неправильном столбце.Как я могу это сделать?

Я пытался сохранить выбранный объект ячейки, но это не сработало, потому что в момент возникновения события CellClick выбранный объект ячейки изменится.

Кроме того, по какой-то причине мой четкий выборне работает каждый раз, когда я щелкаю не ту ячейку, особенно если я щелкаю ее очень быстро, неправильная ячейка все равно останется выделенной, для вашей информации событие DataGridView CellClick динамически добавляется во время выполнения, и существует несколько элементов управления DataGridView.

Мой код Я не могу предоставить способ, которым я использую для заполнения DataGridView, потому что он очень длинный.

  private void Form1_Load(object sender, EventArgs e)
  {
      DGV.CellClick += new DataGridViewCellEventHandler(DGV_CellClick);
  }

  void DGV_CellClick(Object sender, EventArgs e)
  {
      DataGridView dgv = (DataGridView)sender;
      // DataGridViewCell Selectedcell = dgv.SelectedCells[0];
      if (!dgv.Columns[dgv.SelectedCells[0].ColumnIndex].HeaderText.Contains("SCORE"))
          dgv.ClearSelection();
  }

1 Ответ

0 голосов
/ 14 мая 2019

Поскольку у вас включен только один столбец, используя событие 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];
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...