Хорошо, я предвосхищу это, сказав, что не могу воспроизвести проблему, с которой вы столкнулись. Тем не менее, вы упомянули, что ошибка на самом деле происходит в dataGridView1.CurrentCell = cell;
, что должно было исключить ошибку индекса -1.
Кроме того, вы сказали, что вы получаете ошибку Index -1 does not have a value.
Это означает, что, даже если у вас правильный индекс, cell
по-прежнему отображается как индекс -1. Это означает, что либо ячейка не существует, либо происходит что-то еще отрывочное. Поскольку вы говорите так, будто уже давно занимаетесь этим, я предполагаю, что клетка действительно существует.
Поскольку ошибка, похоже, отсутствует ни в одной из четырех выложенных вами строк, я бы сказал, взгляните куда-нибудь еще, например, когда вы впервые связываете источник с представлением данных.
Обновление : я просто нашел несколько ссылок, связанных с этим. Поскольку я не знаю, как вы связали свое представление данных, я действительно не знаю, применимо ли какое-либо из них, но если да, дайте нам знать! В любом случае, похоже, что это может относиться к привязке.
От: SO Вопрос 1
Если вы изначально связываете пустой
Коллекция, которая не информирует
DGV изменений (например, коллекция делает
нет, но BindingList делает),
начальное смещение текущей строки будет
правильно установить -1, (потому что это
пустой.)
Когда вы впоследствии добавляете объекты в
ваша коллекция данных, они будут
по-прежнему правильно отображается на сетке,
но CurrencyManager не будет
информирован о любых изменениях, и
текущее смещение строки останется
упорно на -1. * * +1023
Итак, когда вы пытаетесь редактировать строку,
CurrencyManager считает, что вы пытаетесь
редактировать строку со смещением -1, а
исключение.
Чтобы бороться с этим, вам нужно привязать
перед взаимодействием со строкой, или
изначально связывать коллекцию и т.д., когда
содержит один или несколько предметов.
SO Вопрос 2
.NET Monster Question