2009-07-03 2 views
0

У меня есть datagridview и combobox, которые случайно заполняются данными. Однако новые данные никогда не отображаются автоматически. Кто-то упомянул идею о недействительности элемента управления, чтобы заставить приложение перерисовать его и, таким образом, перебрать содержимое и заполнить элемент управления новыми данными.C# Win Forms Автоматическое обновление элементов управления

Кто-нибудь знает, что является лучшим методом для внедрения элементов автоматического обновления в приложениях форм Windows?

help С благодарностью,

приветствует.

ответ

0

Если вы используете источник BindingSource, метод BindingSource.ResetBindings может вам помочь.

0

Я полагаю, вы используете привязку данных? Вы используете привязку данных к пользовательским объектам?

В этом случае ваши классы должны реализовать интерфейс INotifyPropertyChanged.

0

Обычно установить свойство datasource для datagridview достаточно, чтобы заставить datagridview аннулировать себя и перерисовать. В некоторых случаях я вспоминаю, что мне, возможно, пришлось сначала установить datagridview.datasource = null, а затем снова установить источник данных, чтобы вызвать обновление.

0

Иногда недействительный элемент управления не всегда работает. Поскольку WM_PAINT (сообщение с базовыми окнами) является одним из сообщений с самым низким приоритетом в очереди сообщений. Следовательно, Windows игнорирует запросы на краски, если они слишком часто. (Это еще одна причина, по которой мы видим «белое окно» с только границей в приложениях, которые перестали отвечать на запросы. Чтобы обойти это, вызовите Application.DoEvents(); Это заставит очередь обрабатывать все события, включая ваш запрос чтобы перерисовать его.

0

Если вы говорите о элементе управления, который заполняется данными из базы данных за пределами вашего приложения, тогда нет возможности для элемента управления знать, что данные были изменены, если вы не повторно запросите базу данных .

Если у вас есть приложение, которое выполняет сами изменения данных, вы можете реализовать интерфейс INotifyPropertyChanged, что означает, что вы можете иметь событие PropertyChanged tha t ваш контроль реагирует так, чтобы он обновлялся, когда что-то менялось. На следующей странице приведен пример выполнения: http://www.codeproject.com/KB/cs/BindBetterINotifyProperty.aspx

+0

Данные datagridview и combobox заполнены данными из XML-документа. Возможно ли реализовать интерфейс INotifyPropertyChanged для автоматического обновления? – Goober

+0

Только в том случае, если документ XML сохраняется или создается из вашего приложения. Если он исходит из внешнего источника, вам придется активно отслеживать его для изменений. Если XML-документ является файлом, вы можете использовать элемент управления FileSystemWatcher для периодического тестирования, если он был изменен, а затем просто попросите его перезагрузить его. –