Мне связали DataGridView с BindingList (C# Windows Forms). Если я изменяю одно из значений в объекте в списке, он сразу не обнаруживается в сетке. Если я нажимаю на измененную ячейку или минимизирую, затем максимизируют окно, которое она обновляет правильно, но мне нужна она для случая автоматически.
У меня была та же проблема ранее, но в той ситуации я должен был изменить цвет фона ячейки в то же самое время, когда измененное значение. Это заставило ячейку обновляться правильно.
Единственным путем я могу добраться, это для работы...
dataGridView.DataSource = null;
dataGridView.DataSource = myBindingList
... но я действительно хотел бы избежать этого, поскольку это заставляет полосу прокрутки появиться назад к вершине и означает, что я должен был бы выбрать свои цвета фона ячейки снова. Конечно, существует лучший путь. Я попробовал Обновление (а также обновление родителя), Обновление, и Делаю недействительным, но они не делают то, в чем я нуждаюсь.
Я видел эту проблему, упомянутую на нескольких форумах, но еще не видел рабочий ответ на нее.
Уведомления ListChanged
об изменении значения элемента поднимаются только если тип элемента списка реализует интерфейсINotifyPropertyChanged
.
Взято из: http://msdn.microsoft.com/en-us/library/ms132742.aspx
Итак, мой первый вопрос: Ваш элемент реализует INotifyPropertyChanged
правильно?
Похоже, что ваше уведомление об изменении объекта не срабатывает / не обрабатывается правильно. Лично я всегда использую объект BindingSource при привязке к dataGridView.
Я бы проверил DataGridView FAQ и DataBinding FAQ и поискал уведомление об изменении объекта.
Если вы используете ADO.Net, не забудьте вызвать методы .Validate() и .EndEdit().