2012-01-04 82 views
2

我有一个绑定到数据表的wingrid。我创建一个新的异步线程,并从该线程进行远程服务器调用,传递数据表。服务器通话完成后,wingrid将自动刷新以显示任何更改。但是,由于这不是在程序的主UI线程上完成的,我们经常会在控件出现乱码并出现大红色X时出现错误。Infragistics - 当数据源发生变化时禁用ultrawingrid自动更新

是否有一个标志来设置wingrid在数据源更改时不自动上移?我想在远程服务器调用之前将其关闭,并在主线程中重新打开它。

回答

2

的解决方案是异步方法之前,使用

Grid1.BeginUpdate() 

。这种方法阻止网格绘画。然后在完成异步方法后,在UI线程上使用

Grid1.EndUpdate() 

+0

这只能防止绘画。最好的方法是始终更新UI线程上的DataTable,因为没有任何方法可以阻止网格或任何绑定控件接收通知,并且这仍然从后台线程更新控件,这可能会导致问题,因为只有几个线程安全的Control成员。有关线程安全性的更多详细信息,请参阅MSDN上Control的“线程安全”部分:http://msdn.microsoft.com/en-us/library/system.windows.forms.control.aspx – alhalama 2012-01-05 16:54:34

+0

也可以使用像'PostSharp'这样的免费库或许可以帮助它的'[ThreadSafeMethod]'? – Prokurors 2016-08-05 09:15:35

0

我想你想要的是:

Grid1.SuspendRowSynchronization() 

然后,在完成时:

Grid1.ResumeRowSynchronization() 
+0

这没有奏效。我在数据表中添加并更新了行,并且网格仍显示出这些变化 – briddums 2012-01-04 22:21:26

+0

这很奇怪。根据Infragistics文档(http://help.infragistics.com/Help/NetAdvantage/WinForms/2011.2/CLR2.0/html/Infragistics2.Win.UltraWinGrid.v11.2~Infragistics.Win.UltraWinGrid.UltraGridBase~SuspendRowSynchronization。 HTML),这不应该发生。这听起来像是一个可能的错误在控制。 – 2012-01-04 22:27:11

相关问题