2012-07-24 54 views
0

我有一個SearchResultCollection中的目錄條目列表。 類似:使用lambda填充DataGridView

SearchResultCollection src = ds.FindAll(); 

我需要這樣的東西:

dgvItems.datasource = [... something ... ] 

現在,我使用的foreach通過收集迭代和一次插入一行到DataGridView,就像這樣:

DataTable dt = new DataTable(); 
dgvItems.datasource = dt; 
foreach (SearchResult sr in src) 
{  
. 
. 
dt.rows.add(sAMAccountName, sn, givenName); 
} 

這是一個緩慢的,因爲在一個大表中的src。有沒有辦法加快使用lambdaslinq

+1

LINQ不會加速你的代碼,實際上它可能會減慢它,因爲它有更多的開銷。它幾乎和你正在執行的循環一樣。 – 2012-07-24 18:55:33

+0

你可能想要以虛擬模式運行DGV:http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.virtualmode.aspx – Tergiver 2012-07-24 19:01:02

+0

@Peter你確定這個問題是關於asp 。淨?使用datagridview標記的操作並提到問題中的winform控件。您的回答和編輯顯示不正確。 – 2012-07-24 20:48:57

回答

0

LINQ絕對不會加快你的代碼。無論您是否使用lambda/LINQ,最終結果都是相同的:項目被逐個添加到DataGridView。

我懷疑緩慢的行爲可能是由於每次添加項目時,DataGridView對象都會執行一些昂貴的UI操作(例如重繪本身,計算滾動條位置)。

如果這是導致此問題的原因,請在添加項目之前嘗試隱藏DataGridView,並在添加所有項目後再次使其可見。

或者,您可以嘗試預先準備DataTable,並在所有數據準備就緒後將其分配給DataGridView的DataSource屬性。

希望這會有所幫助。