JQGrid一次获取页面级数据

时间:2013-03-13 12:27:16

标签: c# jquery asp.net-mvc jqgrid

目前我已经实现了jqgrid,它从数据库中获取数据并将JSON数据返回给JQGRID。

JQGrid致电

        rowNum: 10,
        rowList: [5, 10],
        url: "/Home/GetDataFromEntity"

从C#返回的数据

return Json(result, JsonRequestBehavior.AllowGet);

如果页面只有10条记录我想从DB带来10条记录,如果他们点击下一页我想获得下一个10条数据,那么我想尝试的是因为如果数据很大我不想带所有数据到memmory,我认为这将是一个性能命中。

我该如何实现?

由于

3 个答案:

答案 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。