DataGridViewRow Неправильный индекс ячейки

у меня возникла проблема при попытке получить некоторые значения через DataGridViewRow. проблема в том, что индекс моей ячейки равен 7, и когда я пытаюсь получить данные из ячейки, используя этот код:

 foreach (DataGridViewRow r in this.mydatagrid.Rows)
        {
            if (Convert.ToBoolean(r.Cells[0].Value) == true)
            {
                DataGridViewComboBoxCell cc = (DataGridViewComboBoxCell)r.Cells[7];
                cc.Value = toolStripComboBox1.SelectedItem.ToString();
                edit_subject(Convert.ToInt32(r.Cells[1].Value), r.Cells[7].Value.ToString());
            }

появляется ошибка исключения, говорящая, что Cells[7] is OutOfIndex . поэтому я пытался изменить индекс ячейки с 7 на 5, и иногда это работало, а иногда нет.

Пожалуйста, мне нужно объяснить, потому что это действительно странно.


person redcode    schedule 14.04.2015    source источник
comment
Он начинает считать с 0. Таким образом, индекс 7 — это 8-я ячейка. Очевидно, в вашей сетке данных нет 8 ячеек.   -  person phpmeh    schedule 14.04.2015
comment
Это поможет, если вы установите точку останова на строке edit_subject и посмотрите, чему равно r.Cells[1].Value. Это поможет вам понять порядок ячеек. Как сказал @phpmeh, у вас, вероятно, нет ячейки с индексом 7, если в вашей строке всего 7 значений, тогда самый высокий индекс ячейки будет равен 6.   -  person dub stylee    schedule 14.04.2015
comment
Покажите нам разметку вашего элемента управления, тогда мы увидим, действительно ли там 7 ячеек   -  person Enrique Zavaleta    schedule 14.04.2015
comment
@phpmeh я пытался отладить так много способов, это 7 ячеек, начиная с 0, конечно. моя сетка данных содержит 8 ячеек, 7 - textboxcell, а последний - comboboxcell. когда я сказал, что это сработало, изменив индекс на 5, это означает, что что-то не так с индексацией ячеек, потому что правильный индекс для comboboxcell равен 7 . но каким-то образом оно стало 5. примечание: я использовал одни и те же ячейки с правильным индексом в той же программе, но с другим кодом, и он работает нормально, я проверял значение, всякий раз, когда он работал, я получал правильное значение, когда это не так. получил неправильное значение из неправильной ячейки.   -  person redcode    schedule 14.04.2015


Ответы (1)


хорошо, я нашел решение, проблема вызвана тем, что мой синтаксис SQL (источник данных Datagrid) имеет другой порядок, чем столбцы datagridview, я не понял, потому что автозаполнение сетки данных было отключено. и я установил DataPropertyName для каждого столбца вручную.

в любом случае, спасибо за ваш ответ.

person redcode    schedule 15.04.2015