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)
为您的网格提供结果的控制器操作可以接受来自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)
Trirand jqGrid for ASP.NET MVC 使用方法IQueryable内部的接口JqGrid.DataBind()来实现分页、排序和过滤。
因此,这里的关键是使用数据源,它在数据库级别处理这些类型的操作(通过以仅获取所需数据的方式对数据库进行 SQL 查询)。所有主要的 ORM 都支持此功能,包括:LINQ-2-SQL、Entity Framework、NHbiernate、LLBLGen。
您只需使用其中一项技术,并将所需的上下文直接传递给JqGrid.DataBind()方法(无需像在示例中那样手动提取数据)。
| 归档时间: |
|
| 查看次数: |
2046 次 |
| 最近记录: |