2013-03-13 70 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。