Не удается удалить строку из DataGridView - PullRequest
2 голосов
/ 29 ноября 2010

Я просто пытаюсь удалить строку из DataGridView. По сути, первый столбец представляет собой поле со списком, и когда пользователь выбирает «[Удалить]» из поля со списком, следует удалить всю строку. Итак, у меня есть этот код события OnCellEndEdit:

if (grid.CurrentCell.ColumnIndex == 0 && grid.CurrentRow.Cells[0].Value.ToString()=="[Remove]") {
  grid.EndEdit();
  grid.Rows.RemoveAt(grid.CurrentRow.Index);
}

Вместо того, чтобы удалить строку, выдается исключение:

Операция недопустима, поскольку она приводит к повторному вызову функции SetCurrentCellAddressCore.

Я пытался переместить CurrentRow в другой столбец перед удалением, например:

DataGridViewRow deleteRow = grid.CurrentRow;
grid.CurrentRow.Selected = false;
grid.Rows[deleteRow+1].Selected = true;
grid.Rows.RemoveAt(deleteRow);

Та же проблема. Атрибут AllowUserToDeleteRows сетки имеет значение true. Я не привязываю данные к этому элементу управления.

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

Могу ли я программно вызвать событие OnClick кнопки? Как?

Ответы [ 2 ]

1 голос
/ 29 ноября 2010

Похоже, вы уже звоните OnCellEndEdit, поэтому я не думаю, что вам нужно снова звонить grid.EndEdit()Попробуйте удалить этот вызов и посмотрите, удаляется ли строка.Я считаю, что ошибка вызвана тем, что вы можете оказаться в бесконечном цикле.

0 голосов
/ 23 января 2015

используйте следующую проверку перед применением вашей правки:

public void myGrid_EndEdit(object sender, DataGridViewCellEventArgs e) 
{
  if (!myGrid.Rows[e.RowIndex].Cells[e.ColumnIndex].Selected)
                return;
  //...rest of your code to apply edit below...
}

Это должно работать с любой редактируемой ячейкой (код редактирования не применяется при потере фокуса; достаточно ввести Enter, чтобы применить редактирование)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...