2014-10-27 19 views
0

所以我使用BrightIdeasSoftware的DataListView變體用於我的c#項目。重建列和添加一個新的數據集到DataListView

我使用按鈕來改變DataListView的視圖。當按下按鈕時,執行以下操作:

olv.DataSource = null; 

olv.AllColumns = colList; 
olv.RebuildColumns(); 

//Fill OLV with data 
olv.DataSource = dt; 

第一個按鈕創建1列並將視圖更改爲View.Tile ;.

第二個按鈕創建4列並將視圖更改爲View.Details ;.

立即顯示新列,但數據顯示在列表中需要大約一秒。當我重建大量的列時需要更長的時間。

當我運行我的應用程序時,它立即在View.Details中生成4列的視圖。 只有當我從第一個按鈕視圖切換到第二個按鈕視圖時,它會暫停一會兒。

在調試模式下,我注意到RebuildColumns()是掛起的那個。 但是,如果我離開olv.DataSource = dt;在立即執行RebuildColumns()後執行代碼。

有人可以向我解釋爲什麼會發生這種情況嗎?

感謝

回答

1

首先是我也不清楚,如果你正在使用的切換列表相同DataTable(我認爲這是你的dt對象的類型)。如果來源相同,則不需要添加和刪除列,您可以設置OLVColumn.IsVisible。這更快。

其次,設置ObjectListView.DataSource = null不會從列表中刪除項目(你需要ObjectListView.ClearObjects爲該),但什麼,將要做的是無效的內部DataSourceAdapter.CurrencyManager這將阻止任何一項更新,直到ObjectListView.DataSource專門重新設置。設置數據源會將項目添加到列表中(調用ObjectListView.BuildList),如果源很大,這可能會很昂貴。

結論:

如果你只是列出之間,然後共享數據源切換:

foreach (var column in this.dataListView.AllColumns) 
    column.IsVisible = true; 
// call this only when tampering with columns 
this.dataListView.RebuildColumns(); 
// if you need to add/remove items, same philosophy, partial instead of 
// complete update use filtering instead of DataSource reset 

如果列表中沒有一個共同的數據源,因此列完全不同的話,那就是你有一個價格支付,重建專欄和物品,但你可以用TabControl來逃脫。您可以在列表之間切換,而不必一直重置DataSource。這應該是一次性的體驗。

相關問題