C # Datagridview Редактировать ячейку - PullRequest
1 голос
/ 04 апреля 2011

Я пытаюсь поместить курсор и фокус в последнюю строку и конкретную ячейку со столбцом с именем «CheckNumber».Я думал, что у меня это с этим:

  var c = dataGridView1.RowCount;
  DataGridViewCell cell = dataGridView1.Rows[c-1].Cells[0];
  dataGridView1.CurrentCell = cell;
  dataGridView1.BeginEdit(true); 

но он продолжает выдавать эту ошибку:

Индекс -1 не имеет значения.

Может кто-нибудь пожалуйстаНаправь меня в правильном направлении !?Это сводит меня с ума.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 08 апреля 2011

Хорошо, я предвосхищу это, сказав, что не могу воспроизвести проблему, с которой вы столкнулись. Тем не менее, вы упомянули, что ошибка на самом деле происходит в 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

0 голосов
/ 04 апреля 2011

Сначала проверьте количество строк, чтобы убедиться, что вы не пытаетесь получить доступ к отрицательному номеру строки, когда строк нет.

var c = dataGridView1.RowCount;

if(c>0){  
  DataGridViewCell cell = dataGridView1.Rows[c-1].Cells[0];
  dataGridView1.CurrentCell = cell;
  dataGridView1.BeginEdit(true); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...