在Asp.Net MVC中使用JQGrid和自定义分页

时间:2012-06-01 12:28:50

标签: asp.net-mvc-3 jqgrid-asp.net

我正在使用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网格允许您传入总行数,并正确显示分页

1 个答案:

答案 0 :(得分:0)

好的,所以我自己设法解决了这个问题。可能有其他方法可以做到,如果是这样,我很乐意听到它们!

JQGrid.DataBind生成一个JsonResult对象,其Data值设置为Trirands自己的对象Trirand.Web.Mvc.JsonResponse

它是Trirand.Web.Mvc的内部类,所以我必须复制它的结构,我可以使用Visual Studio调试看到它。

它有:

  • 页面 - 当前页码
  • 记录 - 总记录数
  • 行 - Trirand.Web.Mvc.JsonRow类型(我也需要复制)
  • 总计 - 所需的总页数

JsonRow看起来像:

  • cell - 列的字符串数组
  • id - 您的行ID

所以我的代码看起来像这样:

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?? "";

            }
        }