2014-02-23 53 views
0

下面的代碼在我的應用程序啓動時被調用。數據源確實有1個項目。但是,消息框永遠不會顯示。現在,當第一次繪製用戶界面時,gridview確實有一行。如果我在一個按鈕上再次調用代碼,請按下消息框顯示正確。這裏發生了什麼,我該如何解決它(我認爲它與線程有關,因爲radGridview尚未實際更新)?在啓動時Gridview列數始終爲0

C#代碼綁定網格

// Bind list to gridview 
this.radGridViewFiles.BeginInvoke((MethodInvoker)(() => this.radGridViewFiles.DataSource = null)); 
this.radGridViewFiles.BeginInvoke((MethodInvoker)(() => this.radGridViewFiles.DataSource = MyGlobals.ListOfItemsToControl.Concat(MyGlobals.lstNewItems.Where(i => i.sItemRequestStatus == "Add").ToList()))); // 

if (radGridViewFiles.Columns.Count > 0) 
{ 
    RadMessageBox.Show(" This messagebox should show on startup but it does not - But if i call all this code again manually on a button press it does show ??? !!"); 

} 

回答

2

要以異步方式綁定GridView的,這就是爲什麼當您檢查列計數它仍然是零。

我建議你在同一個線程中綁定它或等待異步操作完成。

按照您的要求,這裏是使用EndInvoke的代碼示例。雖然如果你用一種方法把它全部放在這裏 - 你不會從異步調用中獲得任何東西。

// You don't need this, so i commented it out. 
// it's excessive, you are going to overwrite this variable anyway 
// this.radGridViewFiles.BeginInvoke((MethodInvoker)(() =>this.radGridViewFiles.DataSource = null)); 

var asyncRes = this.radGridViewFiles.BeginInvoke((MethodInvoker)(() => this.radGridViewFiles.DataSource = MyGlobals.ListOfItemsToControl.Concat(MyGlobals.lstNewItems.Where(i => i.sItemRequestStatus == "Add").ToList()))); 

// This method blocks until previous operation is done 
// It's quite pointless. In real life you should call it somewhere from another thread 
// While qui thread is unblocked and displaying progress bar or something like this. 
this.radGridViewFiles.EndInvoke(asyncRes); 

// at this point, binding is complete 
if (radGridViewFiles.Columns.Count > 0) 
{ 
    RadMessageBox.Show(" This messagebox should show on startup but it does not - But if i call all this code again manually on a button press it does show ??? !!"); 
} 
+0

如何等待異步操作完成? – user1438082

+1

@ user1438082你在你的'radGridViewFiles'上調用'EndInvoke'。此操作將阻止,直到操作完成。 – Anri

+0

是正確的方式來做到這一點 - 我有,根據您的反饋瞭解有關異步和等待,沒有網站提到endinvoke?如果我確實需要endinvoke,那麼你可以指定所需的代碼行/行。 – user1438082