Сделайте новую строку грязной программно и вставьте новую строку после нее в DataGridView - PullRequest
6 голосов
/ 21 декабря 2010

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

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

Но в моем случае, когда пользователь входит в любое поле новой строки, я перехватываю функциональную клавишу и изменяю значение ячейки программным путем.

myGrid.CurrentCell.Value = "xyz";

И под ним не вставляется новая строка.

Теперь в качестве обходного пути я попробовал это на обработчике событий CellValueChanged.

  if (myGrid.NewRowIndex == e.RowIndex)
  {
    myGrid.Rows.Insert(e.RowIndex + 1, 1);
  }

Но выдает ошибку, сообщающую No row can be inserted after the uncommitted new row..

Как я могу сказать myGrid, что ясделали текущую строку (которая является новой строкой) грязной и что после нее требуется новая строка?

Ответы [ 4 ]

7 голосов
/ 12 февраля 2015

Я работаю над winforms DataGridView.В моем случае я попробовал решение @iSid, но здесь есть помощь в этом, я попробовал это

myGrid.NotifyCurrentCellDirty(true);
myGrid.NotifyCurrentCellDirty(false);

Из-за того, что текущая ячейка не работает, вы должны зафиксировать эту ячейку.В следующей команде я отмечаю, что текущая ячейка не является грязной, это заставит datagridview добавить грязную строку.Это работает в моем проекте.

6 голосов
/ 21 декабря 2010

Здесь я получил решение

myGrid.NotifyCurrentCellDirty(true);
0 голосов
/ 09 сентября 2013

Это действительно очень поздно, учитывая сроки вопроса, но принятый ответ мне не помог. В итоге я решил, что сначала вставил строку над грязной строкой, а затем изменил эту «чистую» строку.

if (e.RowIndex == myGrid.Rows.Count - 1)
{
    myGrid.Rows.Add();
}
myGrid[e.ColumnIndex, e.RowIndex].Value = etd.ResultText; // Edit at your leisure.
0 голосов
/ 21 декабря 2010

Я думаю (хотя я не уверен), что вы пытаетесь вставить строку после Новой строки ... что невозможно. Изменение вашего кода на этот

myGrid.Rows.Insert(e.RowIndex - 1, 1);

Должен вставить строку перед Новой строкой, которая должна работать.

...