Я пишу это приложение на C #, .NET 4, winforms.
Я хочу программно добавить новую строку в сетку данных, которая привязана к коллекции. Когда я это делаю, я получаю исключение. (примечание: когда пользователь создает новую строку через datagridview (вводит что-то в новую строку), у меня нет проблем).
locationBindingSource.AddNew(); //this is bound to datagridview
var row = locationsDGV.Rows[locationsDGV.Rows.Count - 2]; //get the new row
locationsDGV.CurrentCell = row.Cells[0]; //switch to new row <-throws error
Возникла ошибка: System.InvalidOperationException не обработано. Операция не выполнена, поскольку программа не может зафиксировать или выйти из изменения значения ячейки.
Мне нужно переключиться на новую строку, чтобы пользователь не оставлял строку в неподтвержденном состоянии.
Можно ли преодолеть это, не отключив проверку строки?
Спасибо за ваши ответы.
РЕДАКТИРОВАТЬ: Bindingsource заполняется объектами, созданными Entity Framework. Когда пользователь создает новый объект, например «location», он создается со значениями по умолчанию, которые не могут быть сохранены в базе данных, поэтому мне нужна проверка. Я подтверждаю, что все важные поля не пусты (или заполнены значениями по умолчанию). Если они есть, я отменяю проверку. Я думаю, что вы можете легко воссоздать его с помощью простого связующего списка простых (достаточно одного строкового поля) объектов, связанных с сеткой данных. Затем создайте событие проверки строки и подтвердите, используя нечто подобное.
Location location = (Location)locationBindingSource.Current;
if (string.isNullOrWhitespace(location.stringProperty))
e.cancel=true;