簡體   English   中英

JQGrid一次獲取頁面級數據

[英]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與傳承下去對數據進行排序sidxsord ,然后我們跳過頁面,我們感興趣的是通過之前的所有記錄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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM