Установка значения ячейки в datagridview не работает при загрузке формы

Это мой код для установки значения в datagridview клетка:

For i = 0 To dvJOBranch.Rows.Count - 1
        dvJOBranch.Rows(i).Cells.Item("XS").Value = 0
        dvJOBranch.Rows(i).Cells.Item("S").Value = 0
        dvJOBranch.Rows(i).Cells.Item("M").Value = 0
        dvJOBranch.Rows(i).Cells.Item("L").Value = 0
        dvJOBranch.Rows(i).Cells.Item("XL").Value = 0
Next

Он работает в событии кнопки, отображается событие формы, но не в форме загрузки, и нет ошибок.

Мой вопрос, почему он не работает в форме загрузки?

1 ответ

Решение

Я предполагаю, что вы используете DataGridView.AutoGenerateColumns функциональность и даже если вы установите DataSource собственность, DatagridView не будет создавать столбцы, пока не отобразится сетка.

Это может объяснить, почему это не работает в formload (сетка еще не инициализирована) и работает после (с показанным событием, например).

Так что возможно, что:

  • вы пытаетесь получить доступ к элементам, которые еще не существуют (но код должен вызвать исключение)
  • или вы получаете доступ к действительным строкам или столбцам, но они заменяются, когда сетка отображается в первый раз или снова привязывается к источнику данных, и поэтому ваш код не имеет никакого эффекта (вероятно, ваш случай, поскольку вы не упомянули исключение).

С помощью form_shown возможно, это обходной путь, но я рекомендую вам использовать DataGridView.DataBindingComplete событие, которое более специально разработано, чтобы справиться с этой ситуацией.

Смотрите также эти связанные проблемы (та же причина):

Другие вопросы по тегам