0

我将 JQGrid 与 Trirand.Web.Mvc 类一起使用,并试图弄清楚如何进行自定义分页。

我在这里看到了分页演示

这些演示的问题在于它们直接绑定到 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 网格允许您传入总行数,并正确显示分页

4

1 回答 1

0

好的,所以我自己设法解决了这个问题。可能还有其他方法可以做到这一点,如果是这样,我很想听听他们的声音!

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

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

它有:

  • page - 当前页码
  • 记录 - 总记录数
  • rows - Trirand.Web.Mvc.JsonRow 类型(我也需要复制)
  • total - 需要的总页数

JsonRow 看起来像:

  • 单元格 - 列的字符串数组
  • 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?? "";

            }
        }
于 2012-06-01T13:58:49.587 回答