JQGrid加载大量数据

Chi*_*ief 5 asp.net-mvc jqgrid asp.net-mvc-3

情况

我在我的项目中使用Trirand JQGrid用于MVC [服务器端].

我在一张桌子上有超过5万条记录.

我通过调用这段代码加载数据.这就是500000记录集合的原因.

IEnumerable<myIndexViewModel> myviewmodel= _allincidents.Select(x => new myIndexViewModel
            {

                IncidentRequestStatus = x.RequestStatus,
                RequestByUserName = x.RequestByUserName,
                Subject = x.Subject

            });     
gridModel.JqGrid.DataBind(myviewmodel.AsQueryable());
Run Code Online (Sandbox Code Playgroud)

JQgrid非常好地处理基于json的ajax请求,对于我点击的每个下一页.

问题

我不想在页面加载事件上一起加载5万条记录,因为它会杀死jqgrid.

如果我在DB中编写存储过程以请求显示特定页面,那么它将仅加载myviewmodel集合中的该页面.

如何在单击下一页时从数据库中获取页面.这在jqgrid中甚至可能吗?

情况2

基于VIJAY和MARK的答案,他们所展示的方法是绝对正确的,但是在这里,MVC的JQGRID设置了DATAURL属性以进行方法调用.在这种情况下,它是IncidentGridRequest.

如何在单击网格下一页或上一页时发送页码?

incidentModel.IncidentGrid.DataUrl = Url.Action("IncidentGridRequest")

 public JsonResult IncidentGridRequest()
        {
         }
Run Code Online (Sandbox Code Playgroud)

Mar*_*ark 6

为您的网格提供结果的控制器操作可以接受来自jqGrid的一些额外信息.

    public ActionResult GetGridData(string sidx, string sord, int page, int rows, bool _search, string filters)
Run Code Online (Sandbox Code Playgroud)

您感兴趣的主要部分是页面,行(sidx用于列排序,sord用于排序顺序,_search是否在网格上进行了搜索,如果是,则过滤器包含搜索信息)

当您生成结果时,您应该能够

IEnumerable<myIndexViewModel> myviewmodel = allincidents.Select(x => new myIndexViewModel
            {

            IncidentRequestStatus = x.RequestStatus,
            RequestByUserName = x.RequestByUserName,
            Subject = x.Subject

        }).Skip((page - 1) * rows).Take(rows)
Run Code Online (Sandbox Code Playgroud)

PS.我不确定您是否使用IEnumberable将从您的数据库中移动大量数据,但您可能希望在为jqGrid生成此数据子集时使用IQueryable.

编辑:要处理您的分页问题,​​您应该计算查询中的总记录数并将该值传递给网格,Ex

int totalRecords = myviewmodel.Count();
Run Code Online (Sandbox Code Playgroud)

然后你会把它作为jSon值传递给你的网格.防爆

    var jsonData = new
    {
        total = (totalRecords + rows - 1) / rows,
        page = page,
        records = totalRecords,
        userdata = new {SearchResultsFound = searchResultsFound},
        rows = (
        ......
Run Code Online (Sandbox Code Playgroud)


tpe*_*zek 1

Trirand jqGrid for ASP.NET MVC 使用方法IQueryable内部的接口JqGrid.DataBind()来实现分页、排序和过滤。

因此,这里的关键是使用数据源,它在数据库级别处理这些类型的操作(通过以仅获取所需数据的方式对数据库进行 SQL 查询)。所有主要的 ORM 都支持此功能,包括:LINQ-2-SQL、Entity Framework、NHbiernate、LLBLGen。

您只需使用其中一项技术,并将所需的上下文直接传递给JqGrid.DataBind()方法(无需像在示例中那样手动提取数据)。