[英]JQGrid Get page level data at a time
目前,我已經實現了jqgrid,它從數據庫中獲取數據並將JSON數據返回給JQGRID。
JQGrid調用
rowNum: 10,
rowList: [5, 10],
url: "/Home/GetDataFromEntity"
從C#返回的數據
return Json(result, JsonRequestBehavior.AllowGet);
我要嘗試的是,如果頁面只有10條記錄,而我想從數據庫中帶走10條記錄,並且如果它們單擊到下一頁,則我要獲取下10條數據,因為如果數據量很大,我不想將所有數據都帶到內存中我認為這將是一場表演熱潮。
我該如何實施呢?
謝謝
這很簡單。 基本上,您所需要做的就是實現分頁,即只向DB請求要顯示的數據頁。 您將看到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中一樣傳遞此分頁查詢。
您必須實現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;
使用上面的參數,然后將條件放在上面的查詢中
您需要使用分頁。 您可以使用.Take
與.Skip
在服務器端方法
得到結果集后,您可以執行以下操作
var smallResultSet = fullResultSet.Skip(request.PageIndex * request.RecordsCount).Take(request.RecordsCount).ToList();
在這里,我假設您要在fullResultSet
變量中獲取結果集, fullResultSet
不是對其進行過濾並將其存儲在smallResultSet
。 將網格綁定到控制器操作時,將傳遞request參數。
之后,遍歷smallResultSet
並創建您的JSONResult。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.