JQGrid一次获取页面级数据
目前我已经实现了jqgrid,它从DB中提取数据并将JSON数据返回给JQGRID。JQGrid一次获取页面级数据
的jqGrid调用从C#
return Json(result, JsonRequestBehavior.AllowGet);
什么我想是如果页面有10条记录只有10条记录我想从DB带来
rowNum: 10,
rowList: [5, 10],
url: "/Home/GetDataFromEntity"
返回的数据,如果他们点击下一个页面我想获取下10个数据,因为如果数据很大,我不想将所有数据都带到内存中,我认为这将是性能命中。
我该如何实现?
感谢
您必须实现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,然后把状态查询如上
这是相当简单的。基本上所有你需要做的就是实现分页,在那里你只需要向数据库询问你要显示的数据页面。您会看到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中执行的一样。
您需要使用相同的分页。您可以使用在服务器端
.Take
和.Skip
方法后,你得到的结果集,你可以做如下
var smallResultSet = fullResultSet.Skip(request.PageIndex * request.RecordsCount).Take(request.RecordsCount).ToList();
这里我做了你撷取你的ResultSet假设在fullResultSet
可变比其过滤和将其存储在smallResultSet
中。将网格绑定到控制器操作时,请求参数将被传递。
之后,迭代smallResultSet
并创建您的JSONResult。
关于如何做的任何例子? – user2067567 2013-03-13 12:33:40