2013-03-13 62 views
0

目前我已經實現了jqgrid,它從DB中提取數據並將JSON數據返回給JQGRID。JQGrid一次獲取頁面級數據

的jqGrid調用從C#

return Json(result, JsonRequestBehavior.AllowGet); 

什麼我想是如果頁面有10條記錄只有10條記錄我想從DB帶來

 rowNum: 10, 
     rowList: [5, 10], 
     url: "/Home/GetDataFromEntity" 

返回的數據,如果他們點擊下一個頁面我想獲取下10個數據,因爲如果數據很大,我不想將所有數據都帶到內存中,我認爲這將是性能命中。

我該如何實現?

感謝

回答

0

您必須實現server side pagination實現這一目標。

我在java中已經實現了這樣的:(您使用的是C#)

int limit = Integer.parseInt(request.getParameter("rows")); // get how many rows we want to have into the grid 
String sidx = request.getParameter("sidx"); // get index row - i.e. user click to sort 
String sord = request.getParameter("sord"); // get the direction 
int start = (limit* page) - limit; 
String rows = request.getParameter("rows"); 

String query = "select * from (select a.*, ROWNUM rnum from (select * from CRM_PROT_STAGES where PROTOCOL_ID = '"+param +"') a where ROWNUM <= "+ limit +")where rnum >="+start; 

使用上述paarameters,然後把狀態查詢如上

+0

關於如何做的任何例子? – user2067567 2013-03-13 12:33:40

1

這是相當簡單的。基本上所有你需要做的就是實現分頁,在那裏你只需要向數據庫詢問你要顯示的數據頁面。您會看到jqGrid會將這些信息提供給您的控制器,以便您可以在檢索數據時使用。

控制器將以此數據通過類似的信息(我不知道你的後端技術堆棧所以這裏是C#代碼)這樣​​的:

public ActionResult GridDataFetch(string sidx, string sord, int page, int rows, bool _search, string filters) 
{ 
.... 

然後,當你去中檢索數據,您可以向數據庫詢問您的用戶需要的數據頁面,而無需檢索整個數據集。這可能是比較複雜的話,好像但基本是像(再次C#代碼)的財產以後簡單

var pagedQuery = dataset.OrderBy(sidx + " " + sord).Skip((page - 1) * rows).Take(rows); 

你可以在上面看到,我們爲了用戶指定和jqGrid的傳承下去的方式將數據與sidx & sord然後我們通過skip跳過我們感興趣的頁面之前的所有記錄,然後我們採取我們感興趣的rows。這又是一個C#方法來抓取一頁數據,但基本應該是有任何設置。作爲一個附註,如果你通過網格進行任何過濾,或者其他邏輯,你會在這次調用之前過濾掉你的數據集。

然後,您會傳遞此分頁查詢,就像您通常在JSON中執行的一樣。

0

您需要使用相同的分頁。您可以使用在服務器端

.Take.Skip方法後,你得到的結果集,你可以做如下

var smallResultSet = fullResultSet.Skip(request.PageIndex * request.RecordsCount).Take(request.RecordsCount).ToList(); 

這裏我做了你擷取你的ResultSet假設在fullResultSet可變比其過濾和將其存儲在smallResultSet中。將網格綁定到控制器操作時,請求參數將被傳遞。

之後,迭代smallResultSet並創建您的JSONResult。