2013-07-26 80 views
2

我有一個SmartGWT ListGrid,每個字段包含16個字符串。網格連接到通過REST提供的數據源。儘管數據源中的數據量很大,但我仍面臨一些問題。SmartGWT ListGrid大數據集問題

在處理非常小的數字時,即使在處理200,000條記錄時也沒有問題。然而,當涉及到更大的數據集時,例如我之前嘗試過的有260萬條記錄,網格只顯示前850,000條記錄,然後拒絕進一步尋找頁面。更奇怪的是,當我的數據源擁有大約2000萬條記錄時,網格只顯示前20條,然後拒絕頁面。

Strangley我可以看到使用isc.showConsole()在我的RPC響應中返回的數據;並且可以看到它正在返回正確的數據,實際上即使它返回了64條有效記錄,它也只會顯示前20條。totalRecords正確返回爲2000萬,但它不會返回頁面。

我網的設置如下

ListGrid grid = new ListGrid(); 
DataSource ds = Application.getMyDataSource(); 
grid.setCriteria(new Criteria("someid", 627263)); 
grid.setDataSource(ds); 

grid.setAutoFetchData(true); 

我的數據源是設置正確,因爲它完美的作品在較小的數據集,每場都作爲一DataSourceTextField創建。

服務器端接受輸入請求,查找進入的someid,檢查_startRow,_endRow參數找到這些行(我沒有爲此使用數據庫)並手動設置startRow,endRow和totalRow字段。

當我檢查數據回來的數據是正確的,但網格拒絕正確顯示它。

我錯過了什麼?列表網格是否有最大尺寸?從我看到他們應該處理數百萬條記錄,但我的似乎完全失敗。

編輯

經進一步檢查,似乎它是SmartGWT的處理滾動條的大小的方式錯誤。目前我不知道如何解決這個問題。

當滾動到表的底部應該是230萬行表時,顯示的最後一行是894,785。這遠遠低於預期的行數。

此時從數據源返回的所有數據都是正確的。有趣的是,點擊最後一行並使用鍵盤上的向下箭頭進行滾動效果很好,這對我來說重新強調了它是一個滾動條問題。

+0

這聽起來像某種溢出/內存問題。你是否收到任何警告/錯誤? –

+0

我忘了提,沒有錯誤,沒有溢出,沒有什麼不尋常的。通過REST傳輸的數據只是分頁數百萬條記錄的一個子集。一般來說,它只能返回約60條記錄,這是我所期望的。問題是ListGrid不能正確處理它。 –

+0

需要檢查的東西:totalRows的值(必須大於endRow - +10 - 才能觸發正確的滾動縮略圖大小),從服務器獲取並返回的記錄數,接收到客戶端的記錄數,開始/結束/總計行每個頁面請求開始和結束時的值 – Sithsu

回答

0

爲了使漸進式加載工作,網格必須被欺騙以指示有更多的數據。

由於我們不希望在只有150個數據獲取時抽取1000個空記錄(實際totalRows),我們需要設置totalRows = 160或其他東西來產生足夠接近的滾動縮略圖大小,以及允許滾動到150以下記錄,以觸發逐步加載下一頁。

檢查:
Paging and total dataset length in ResultSet
http://forums.smartclient.com/showthread.php?t=516
http://forums.smartclient.com/showthread.php?t=2750

當你拖動滾動滑塊速度過快向底部,網格可能 '智能' 跳過加載中間行。

ListGrid.showAllRecords可能是你需要檢查的基礎上http://forums.smartclient.com/showthread.php?t=23638

最後一個線程還表示瀏覽器和大型數據集的問題。