【问题标题】:MVC 2.0 - JqGrid Sorting with Multiple TablesMVC 2.0 - 使用多个表进行 JqGrid 排序
【发布时间】:2011-01-31 15:17:09
【问题描述】:

我正在实施 jqGrid 并希望能够使用排序功能。我在排序与基表相关的列时遇到了一些问题。

这是加载网格的脚本:

public JsonResult GetData(GridSettings grid)
{
    try {
        using (IWE dataContext = new IWE())
        {
            var query = dataContext.LKTYPE.Include("VWEPICORCATEGORY").AsQueryable();

            ////sorting
            query = query.OrderBy<LKTYPE>(grid.SortColumn,
                grid.SortOrder);


            //count
            var count = query.Count();

            //paging
            var data = query.Skip((grid.PageIndex - 1) * grid.PageSize).Take(grid.PageSize).ToArray();

            //converting in grid format
            var result = new
            {
                total = (int)Math.Ceiling((double)count / grid.PageSize),
                page = grid.PageIndex,
                records = count,
                rows = (from host in data
                        select new
                        {
                            TYPE_ID = host.TYPE_ID,
                            TYPE = host.TYPE,
                            CR_ACTIVE = host.CR_ACTIVE,
                            description = host.VWEPICORCATEGORY.description
                        }).ToArray()
            };

            return Json(result, JsonRequestBehavior.AllowGet);
        }
    }
    catch (Exception ex)
    {
        //send the error email
        ExceptionPolicy.HandleException(ex, "Exception Policy");
    }

    //have to return something if there is an issue
    return Json("");
}

如您所见,描述字段是相关表的一部分(“VWEPICORCATEGORY”),并且 order by 以 LKTYPE 为目标。我试图弄清楚如何准确地对特定字段进行排序,或者甚至可能是使用多个表和排序功能来实现此网格的更好方法。

提前致谢, 比利

【问题讨论】:

    标签: entity-framework asp.net-mvc-2 jqgrid jqgrid-asp.net


    【解决方案1】:

    您正在对错误的查询进行排序。

    将您的代码更改为:

            var query = from host in dataContext.LKTYPE
                        select new
                        {
                            TYPE_ID = host.TYPE_ID,
                            TYPE = host.TYPE,
                            CR_ACTIVE = host.CR_ACTIVE,
                            description = host.VWEPICORCATEGORY.description
                        };
    
            ////sorting
            query = query.OrderBy(grid.SortColumn,
                grid.SortOrder);
    
            //count
            var count = query.Count();
    
            //paging
            var data = query.Skip((grid.PageIndex - 1) * grid.PageSize).Take(grid.PageSize).ToArray();
    
            //converting in grid format
            var result = new
            {
                total = (int)Math.Ceiling((double)count / grid.PageSize),
                page = grid.PageIndex,
                records = count,
                rows = data.ToArray()
            };
    

    请注意,Include() 在您的示例中是完全不需要的,因为您正在投影。

    【讨论】:

    • 克雷格,你完全正确。确实需要将排序部分更改为: query = query.OrderBy(grid.SortColumn, grid.SortOrder);感谢您的帮助。
    【解决方案2】:

    我的博客上有一篇文章,展示了我如何将 jqGrid 的排序和分页功能转变为一个非常可重用的 MVC 模式。

    我的帖子在这里: http://www.journeymandeveloper.com/Home/View/4fae1468-3e08-46e0-9208-9e7104d7956b/Server-side%20Paging%20and%20Sorting%20with%20jqGrid

    它包含一个类,您可以将其作为 action 方法的参数,它会为您完成所有工作。您真正需要做的就是在需要结果时给它一个 IQueryable。

    【讨论】:

    • 会检查一下布赖恩。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-26
    相关资源
    最近更新 更多