Могу ли я временно запретить ручному изменению DataGridView обновлять базовый источник данных? - PullRequest
0 голосов
/ 18 июня 2010

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

По сути, у меня есть DataGridView, который связан с BindingList<T>. Я понимаю, что в целом привязка данных очень удобна и экономит много времени (наших разработчиков). Тем не менее, существует значительная проблема производительности с этой сеткой, которая очень велика.

Исходя из предыдущего опыта, я вполне уверен, что производительность может быть значительно улучшена путем ручного обновления только видимых ячеек в DataGridView на таймере, а не реализации INotifyPropertyChanged (на самом деле не осуществимо опция, так как многие значения в этой сетке меняются десятки раз в секунду) или вызывают Refresh. Но есть проблема: если я вручную обновляю ячейки в сетке, каждое обновление вызывает set соответствующего свойства для объекта с привязкой к данным, что, в сумме, приводит к значительному снижению производительности.

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

Было бы неплохо, если бы я мог временно отключить эту функцию DataGridView: на время отключите функцию, отвечающую за обновление основного источника данных на основе обновлений в сетке. Затем, когда я закончу обновлять его вручную, снова включите эту функцию, чтобы user updates do воздействовал на источник данных.

Я попытался использовать BindingSource со свойством DataSource, установленным на BindingList<T>, и вызвать SuspendBinding / ResumeBinding; но это не сработало. set звонки продолжались.

Есть ли какой-нибудь способ выполнить то, что я собираюсь здесь? Я иду по неверному пути полностью?

1 Ответ

1 голос
/ 18 июня 2010

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

http://msdn.microsoft.com/en-us/library/ms171624.aspx

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

Если нет, надеюсь, кто-то скоро сможет дать вам реальный ответ o .-

...