目前我已经实现了jqgrid,它从数据库中获取数据并将JSON数据返回给JQGRID。
JQGrid致电
rowNum: 10,
rowList: [5, 10],
url: "/Home/GetDataFromEntity"
从C#返回的数据
return Json(result, JsonRequestBehavior.AllowGet);
如果页面只有10条记录我想从DB带来10条记录,如果他们点击下一页我想获得下一个10条数据,那么我想尝试的是因为如果数据很大我不想带所有数据到memmory,我认为这将是一个性能命中。
我该如何实现?
由于
答案 0 :(得分:1)
这非常简单。基本上你需要做的只是实现分页,你只需要向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中一样传递此分页查询。
答案 1 :(得分: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;
使用上面的参数,然后将条件置于查询中
答案 2 :(得分:0)
您需要使用分页。您可以在服务器端使用.Take
和.Skip
方法
获得结果集后,您可以执行以下操作
var smallResultSet = fullResultSet.Skip(request.PageIndex * request.RecordsCount).Take(request.RecordsCount).ToList();
这里我假设您在fullResultSet
变量中提取结果集而不是过滤它并将其存储在smallResultSet
中。将网格绑定到控制器操作时,将传递request参数。
之后迭代smallResultSet
并创建您的JSONResult。