Изменение состояния IsNewRow на false в DataGridView или имитация нажатия клавиши в ячейке - PullRequest
2 голосов
/ 07 декабря 2010

Я использую DGV в приложении winforms.Я хотел изменить статус строки с New (IsNewRow) на отредактированный.Всякий раз, когда мы начинаем вводить значения в последней строке DGV, он создает другую строку ниже строки редактирования, устанавливая для свойства текущей строки значение IsNewRow, равное false.

В моем требовании, когда пользователь находится в последней строке и если F6затем я копирую пару значений ячейки сверху строки в текущую строку.В данный момент текущая строка все еще находится в статусе Новая строка (IsNewRow = true).Как только я скопирую значения в текущую строку из вышеуказанной строки, я хочу изменить статус текущей строки на отредактированный, чтобы DGV создал другую строку ниже текущей строки в качестве новой строки.Не уверен, какое событие заставляет DGV создать новую строку, поэтому, пожалуйста, помогите мне в этом.

Можно ли в любом случае изменить статус текущей строки?Свойство IsNewRow доступно только для чтения, поэтому его нельзя изменить.

Обновление : я нашел способ установить текущее состояние строки (IsNewRow = false).Используйте следующий метод: MyGridView.NotifyCurrentCellDirty(true);.

По крайней мере, я хотел бы смоделировать нажатие клавиши, чтобы я обманул DGV, чтобы создать еще одну строку, отредактировав эту строку.Кто-нибудь может сказать мне, как сделать это в DGV?

Этот DGV не привязан к данным.

Ниже приведен код, используемый для копирования значений из строки выше в текущую строку:

  switch (e.KeyData)
  {
    case Keys.F6: //Copy the row above.
      if (MyGridView.CurrentRow != null && MyGridView.CurrentRow.Index > 0)
      {
        MyGridView.CurrentRow.Cells[CustomColumn.Index].Value
          = MyGridView.Rows[rowIndex - 1].Cells[Customer.Index].Value;

        MyGridView.CurrentRow.Cells[DateColumn.Index].Value
          = MyGridView.Rows[rowIndex - 1].Cells[DateColumn.Index].Value;

        MyGridView.CurrentRow.Cells[RefColumn.Index].Value
          = MyGridView.Rows[rowIndex - 1].Cells[RefColumn.Index].Value;
       }
  }

1 Ответ

1 голос
/ 07 декабря 2010

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

Попробуйте выполнить следующее и посмотрите,он делает то, что вы хотите.Я также изменил тест индекса строки, чтобы он копировал значения только в том случае, если пользователь находится в новой строке.

  switch (e.KeyData)
  {
    case Keys.F6: //Copy the row above.
      if (MyGridView.NewRowIndex > 0 && MyGridView.NewRowIndex == rowIndex)
      {
        int colIndex = MyGridView.CurrentCell.ColumnIndex;

        MyGridView.Rows.Add();
        MyGridView.CurrentCell = MyGridView.Rows[rowIndex].Cells[colIndex];

        MyGridView.CurrentRow.Cells[CustomColumn.Index].Value
          = MyGridView.Rows[rowIndex - 1].Cells[Customer.Index].Value;

        MyGridView.CurrentRow.Cells[DateColumn.Index].Value
          = MyGridView.Rows[rowIndex - 1].Cells[DateColumn.Index].Value;

        MyGridView.CurrentRow.Cells[RefColumn.Index].Value
          = MyGridView.Rows[rowIndex - 1].Cells[RefColumn.Index].Value;
       }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...