2012-01-04 83 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

相關問題