我正在使用JQGrid和Trirand.Web.Mvc类,并试图弄清楚如何进行自定义分页。
我看过分页演示here
这些演示的问题是它们直接绑定到linq上下文对象,并让MVC负责分页。
// This method is called when the grid requests data. You can choose any method to call
// by setting the JQGrid.DataUrl property
public JsonResult PerformanceLinq_DataRequested()
{
// Get both the grid Model and the data Model
// The data model in our case is an autogenerated linq2sql database based on Northwind.
var gridModel = new OrdersJqGridModel();
var northWindModel = new NorthwindDataContext();
// return the result of the DataBind method, passing the datasource as a parameter
// jqGrid for ASP.NET MVC automatically takes care of paging, sorting, filtering/searching, etc
return gridModel.OrdersGrid.DataBind(northWindModel.OrdersLarges);
}
我想绑定的数据集非常复杂,我从一个存储过程返回它,它为我做了分页。
所以我必须给JQGrid提供整个结果集的特定页面的正确行大小。我也可以返回总行数。
所以我在List myListOfObjects中得到了我的结果。
我可以使用myListOfObjects.AsQueryable()
将其传递给DataBind问题是,JQGrid认为只有{page size}行,所以不显示任何分页选项。
是否可以传入总行数?
其他网格,如Teleriks MVC网格允许您传入总行数,并正确显示分页
答案 0 :(得分:0)
好的,所以我自己设法解决了这个问题。可能有其他方法可以做到,如果是这样,我很乐意听到它们!
JQGrid.DataBind生成一个JsonResult对象,其Data值设置为Trirands自己的对象Trirand.Web.Mvc.JsonResponse
它是Trirand.Web.Mvc的内部类,所以我必须复制它的结构,我可以使用Visual Studio调试看到它。
它有:
JsonRow看起来像:
所以我的代码看起来像这样:
var jsonList = new List<JSONRow>();
myData.ForEach(x => jsonList.Add(new JSONRow(x)));
var jsonResult = Json (new
{
page = page,
rows = jsonList.ToArray(),
records = totalRows,
total = Math.Round((double)totalRows / rows, MidpointRounding.AwayFromZero)
}, JsonRequestBehavior.AllowGet);
return jsonResult;
我的JsonRow看起来像这样:
public class JSONRow
{
public string[] cell { get; set; }
public string id { get; set; }
public JSONRow(MyObjectType myObject)
{
id = myObject.id;
cell = new string[3];
cell[0] = myObject.Col1;
cell[1] = myObject.Col2?? "";
cell[2] = myObject.Col3?? "";
}
}