2011-04-27 56 views
0

我一直在使用Syncfusion虛擬網格,該網格基於對每個可見的單元格觸發的網格上的覆蓋而工作!它爲我提供了該行和信息欄和一些細胞的對象,讓我設置單元,其格式,顏色等WPF DataGrid填充單元格,因爲它們變得可見

這允許非常快速滾動的非常大型數據集的價值,因爲我根本必須'讀出'的值,如dataSet.Tables [0] .Rows [1000000] [「LastName」]。ToString()

是否有類似WPF DataGrid公開的?

編輯 我需要讓自己更清楚 - 我知道虛擬化和它自己關閉,當你分組等已經運行與分組測試啓用超過20000個
行的數據集做了我的網格嗆本身。 因此,我以前的問題是獨立的! 有沒有任何方式的網格允許我填寫文本,並通過一些覆蓋或回調做一些格式化?

謝謝

回答

1

DataGrid默認使用虛擬化。這可以通過即時創建和刪除單元格或通過回收可見單元格並用當前行數據重新填充它們來實現。這可以通過使用'VirtualizingStackPanel.VirtualizationMode'屬性來關閉和調整,並且在許多情況下被強制關閉(分組是一個很好的例子)。這種虛擬化可能是天賜之物和詛咒。如果你有一套簡單的要求,那麼它很容易獲得良好的性能。另一方面,如果您正在執行復雜的運行時綁定(包括觸發器和自定義列),那麼它會變得有點噩夢。

幾個重要寫​​着:

http://msdn.microsoft.com/en-us/library/cc716879.aspx

http://msdn.microsoft.com/en-us/library/system.windows.controls.virtualizingstackpanel.aspx

+0

感謝您的快速反應,但它不是我的意思 - 我已經編輯上面我的問題。我相信我知道答案是 - 沒有,沒有 - 這會令人失望,但是我將不得不接受這樣一個事實,那就是具有大量數據的DataGrid本質上很慢 - 即使啓用了(默認)虛擬化也是如此! – Marcel 2011-04-27 15:37:10

+0

@Marcel,我想你已經提出了錯誤的問題,因爲'讀出x [100000] .name.tostring()'的值正是循環虛擬化所做的。如果您需要對分組數據進行虛擬化,那麼DataGrid不可能幫助您。另一方面,如果它是訪問x [100000]本身的速度,則可能是數據虛擬化問題。這裏有一個有趣的PDF主題:http://bea.stollnitz.com/files/52/DataVirtualization.pdf – 2011-04-27 15:59:53

+1

再次感謝這一點 - 當我拖動垂直滾動條時,仍然存在滯後現象,當我有> 25,000行一個虛擬化的DataGrid。現在很多,但我的老闆很惱火,它不符合Excel的速度,可以完美地處理超過一百萬行和滾動! – Marcel 2011-04-27 16:31:42